+2011-07-29 Benjamin Kosnik <bkoz@redhat.com>
+
+ Docbook conversion of existing ext/pb_ds documentation.
+ * doc/Makefile.am (xml_sources_manual): Add
+ policy_data_structures.xml and
+ test_policy_data_structures.xml.
+ (stamp-html-copy): Remove special-case for ext/pb_ds directory.
+ (XSLTPROC_FLAGS): Split into XSLT_FLAGS and XSLT_PARAM, use.
+ * doc/Makefile.in: Regenerate.
+ * doc/xml/manual/policy_data_structures.xml: New, adapted from
+ previous html-only instance in doc/html/ext/pb_ds.
+ * doc/xml/manual/test_policy_data_structures.xml: New, same as above.
+
+ * doc/xml/spine.xml: Update copyright.
+ * doc/xml/manual/spine.xml: Same.
+ * doc/xml/manual/extensions.xml: Adjust set, chapter, sections.
+ * doc/xml/manual/bitmap_allocator.xml: Same.
+ * doc/xml/manual/mt_allocator.xml: Same.
+
+ Populate image directory.
+ * doc/xml/images/(pbds_balls_and_bins.png,
+ pbds_binary_priority_queue_random_int_push_timing_test_local.pdf,
+ pbds_binary_priority_queue_random_int_push_timing_test_local.png,
+ pbds_binary_priority_queue_random_int_push_timing_test_local.svg,
+ pbds_cc_hash_random_int_find_timing_test_local.pdf,
+ pbds_cc_hash_random_int_find_timing_test_local.png,
+ pbds_cc_hash_random_int_find_timing_test_local.svg,
+ pbds_cc_hash_random_int_subscript_timing_test_find_local.pdf,
+ pbds_cc_hash_random_int_subscript_timing_test_find_local.png,
+ pbds_cc_hash_random_int_subscript_timing_test_find_local.svg,
+ pbds_cc_hash_random_int_subscript_timing_test_insert_local.pdf,
+ pbds_cc_hash_random_int_subscript_timing_test_insert_local.png,
+ pbds_cc_hash_random_int_subscript_timing_test_insert_local.svg,
+ pbds_container_tag_hierarchy.pdf,
+ pbds_container_tag_hierarchy.png,
+ pbds_container_tag_hierarchy.svg,
+ pbds_different_underlying_dss_1.png,
+ pbds_different_underlying_dss_2.png,
+ pbds_embedded_lists_1.png, pbds_embedded_lists_2.png,
+ pbds_embedded_lists_3.png, pbds_exception_hierarchy.pdf,
+ pbds_exception_hierarchy.png, pbds_exception_hierarchy.svg,
+ pbds_gp_hash_random_int_find_timing_test_local.pdf,
+ pbds_gp_hash_random_int_find_timing_test_local.png,
+ pbds_gp_hash_random_int_find_timing_test_local.svg,
+ pbds_gp_hash_random_int_subscript_timing_test_find_local.pdf,
+ pbds_gp_hash_random_int_subscript_timing_test_find_local.png,
+ pbds_gp_hash_random_int_subscript_timing_test_find_local.svg,
+ pbds_gp_hash_random_int_subscript_timing_test_insert_local.pdf,
+ pbds_gp_hash_random_int_subscript_timing_test_insert_local.png,
+ pbds_gp_hash_random_int_subscript_timing_test_insert_local.svg,
+ pbds_hash_policy_cd.png,
+ pbds_hash_random_int_erase_mem_usage_test_local.pdf,
+ pbds_hash_random_int_erase_mem_usage_test_local.png,
+ pbds_hash_random_int_erase_mem_usage_test_local.svg,
+ pbds_hash_ranged_hash_range_hashing_fns.png,
+ pbds_hash_range_hashing_seq_diagram2.png,
+ pbds_hash_range_hashing_seq_diagram.png,
+ pbds_hash_zlob_random_int_find_timing_test_local.pdf,
+ pbds_hash_zlob_random_int_find_timing_test_local.png,
+ pbds_hash_zlob_random_int_find_timing_test_local.svg,
+ pbds_insert_resize_sequence_diagram1.png,
+ pbds_insert_resize_sequence_diagram2.png,
+ pbds_insert_resize_sequence_diagram3.png,
+ pbds_invalidation_guarantee_erase.png,
+ pbds_invalidation_tag_hierarchy.pdf,
+ pbds_invalidation_tag_hierarchy.png,
+ pbds_invalidation_tag_hierarchy.svg, pbds_list_update.png,
+ pbds_multimap_text_find_timing_test_large_s2p_hash_local.pdf,
+ pbds_multimap_text_find_timing_test_large_s2p_hash_local.png,
+ pbds_multimap_text_find_timing_test_large_s2p_hash_local.svg,
+ pbds_multimap_text_find_timing_test_large_s2p_tree_local.pdf,
+ pbds_multimap_text_find_timing_test_large_s2p_tree_local.png,
+ pbds_multimap_text_find_timing_test_large_s2p_tree_local.svg,
+ pbds_multimap_text_find_timing_test_small_s2p_hash_local.pdf,
+ pbds_multimap_text_find_timing_test_small_s2p_hash_local.png,
+ pbds_multimap_text_find_timing_test_small_s2p_hash_local.svg,
+ pbds_multimap_text_find_timing_test_small_s2p_tree_local.pdf,
+ pbds_multimap_text_find_timing_test_small_s2p_tree_local.png,
+ pbds_multimap_text_find_timing_test_small_s2p_tree_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_hash_local.png,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_hash_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.png,
+ pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_hash_local.png,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_hash_local.svg,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.png,
+ pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.svg,
+ pbds_multimap_text_insert_timing_test_large_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_timing_test_large_s2p_hash_local.png,
+ pbds_multimap_text_insert_timing_test_large_s2p_hash_local.svg,
+ pbds_multimap_text_insert_timing_test_large_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_timing_test_large_s2p_tree_local.png,
+ pbds_multimap_text_insert_timing_test_large_s2p_tree_local.svg,
+ pbds_multimap_text_insert_timing_test_small_s2p_hash_local.pdf,
+ pbds_multimap_text_insert_timing_test_small_s2p_hash_local.png,
+ pbds_multimap_text_insert_timing_test_small_s2p_hash_local.svg,
+ pbds_multimap_text_insert_timing_test_small_s2p_tree_local.pdf,
+ pbds_multimap_text_insert_timing_test_small_s2p_tree_local.png,
+ pbds_multimap_text_insert_timing_test_small_s2p_tree_local.svg,
+ pbds_node_invariants.png,
+ pbds_pairing_priority_queue_text_push_pop_timing_test_local.pdf,
+ pbds_pairing_priority_queue_text_push_pop_timing_test_local.png,
+ pbds_pairing_priority_queue_text_push_pop_timing_test_local.svg,
+ pbds_pairing_priority_queue_text_push_timing_test_local.pdf,
+ pbds_pairing_priority_queue_text_push_timing_test_local.png,
+ pbds_pairing_priority_queue_text_push_timing_test_local.svg,
+ pbds_pat_trie.png, pbds_point_iterator_hierarchy.png,
+ pbds_point_iterators_range_ops_1.png,
+ pbds_point_iterators_range_ops_2.png,
+ pbds_priority_queue_different_underlying_dss.png,
+ pbds_priority_queue_random_int_push_pop_timing_test_local.pdf,
+ pbds_priority_queue_random_int_push_pop_timing_test_local.png,
+ pbds_priority_queue_random_int_push_pop_timing_test_local.svg,
+ pbds_priority_queue_random_int_push_timing_test_local.pdf,
+ pbds_priority_queue_random_int_push_timing_test_local.png,
+ pbds_priority_queue_random_int_push_timing_test_local.svg,
+ pbds_priority_queue_tag_hierarchy.pdf,
+ pbds_priority_queue_tag_hierarchy.png,
+ pbds_priority_queue_tag_hierarchy.svg,
+ pbds_priority_queue_text_join_timing_test_local.pdf,
+ pbds_priority_queue_text_join_timing_test_local.png,
+ pbds_priority_queue_text_join_timing_test_local.svg,
+ pbds_priority_queue_text_modify_down_timing_test_local.pdf,
+ pbds_priority_queue_text_modify_down_timing_test_local.png,
+ pbds_priority_queue_text_modify_down_timing_test_local.svg,
+ pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.pdf,
+ pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.png,
+ pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.svg,
+ pbds_priority_queue_text_modify_up_timing_test_local.pdf,
+ pbds_priority_queue_text_modify_up_timing_test_local.png,
+ pbds_priority_queue_text_modify_up_timing_test_local.svg,
+ pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.pdf,
+ pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.png,
+ pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.svg,
+ pbds_priority_queue_text_pop_mem_usage_test_local.pdf,
+ pbds_priority_queue_text_pop_mem_usage_test_local.png,
+ pbds_priority_queue_text_pop_mem_usage_test_local.svg,
+ pbds_priority_queue_text_push_pop_timing_test_local.pdf,
+ pbds_priority_queue_text_push_pop_timing_test_local.png,
+ pbds_priority_queue_text_push_pop_timing_test_local.svg,
+ pbds_priority_queue_text_push_timing_test_local.pdf,
+ pbds_priority_queue_text_push_timing_test_local.png,
+ pbds_priority_queue_text_push_timing_test_local.svg,
+ pbds_rationale_null_node_updator.png,
+ pbds_resize_policy_cd.png, pbds_restoring_node_invariants.png,
+ pbds_simple_list.png,
+ pbds_text_find_timing_test_hash_local.pdf,
+ pbds_text_find_timing_test_hash_local.png,
+ pbds_text_find_timing_test_hash_local.svg,
+ pbds_text_find_timing_test_tree_like_local.pdf,
+ pbds_text_find_timing_test_tree_like_local.png,
+ pbds_text_find_timing_test_tree_like_local.svg,
+ pbds_tree_node_invalidations.png,
+ pbds_tree_node_invariants.png,
+ pbds_tree_node_updator_policy_cd.png,
+ pbds_tree_order_statistics_timing_test_local.pdf,
+ pbds_tree_order_statistics_timing_test_local.png,
+ pbds_tree_order_statistics_timing_test_local.svg,
+ pbds_tree_split_join_timing_test_local.pdf,
+ pbds_tree_split_join_timing_test_local.png,
+ pbds_tree_split_join_timing_test_local.svg,
+ pbds_tree_text_insert_timing_test_node_tree_local.pdf,
+ pbds_tree_text_insert_timing_test_node_tree_local.png,
+ pbds_tree_text_insert_timing_test_node_tree_local.svg,
+ pbds_tree_text_insert_timing_test_pat_trie_local.pdf,
+ pbds_tree_text_insert_timing_test_pat_trie_local.png,
+ pbds_tree_text_insert_timing_test_pat_trie_local.svg,
+ pbds_tree_text_insert_timing_test_vector_tree_local.pdf,
+ pbds_tree_text_insert_timing_test_vector_tree_local.png,
+ pbds_tree_text_insert_timing_test_vector_tree_local.svg,
+ pbds_tree_text_lor_find_timing_test_local.pdf,
+ pbds_tree_text_lor_find_timing_test_local.png,
+ pbds_tree_text_lor_find_timing_test_local.svg,
+ pbds_trie_node_updator_policy_cd.png,
+ pbds_update_seq_diagram.png): Add.
+
+ * doc/html/ext/pb_ds: Remove.
+ * doc/html/ext/pb_ds/(acks.html, assoc_container_tag_cd.png,
+ assoc_container_tag_cd.svg, assoc_container_traits.html,
+ assoc_design.html, assoc_examples.html,
+ associative_container_tag.html, assoc_performance_tests.html,
+ assoc_regression_tests.html, assoc_tests.html,
+ balls_and_bins.png, basic_hash_table.html,
+ basic_hash_tag.html, basic_invalidation_guarantee.html,
+ basic_tree_assoc_container_const_node_iterator.html,
+ basic_tree.html, basic_tree_tag.html, binary_heap_tag.html,
+ binary_priority_queue_random_int_push_timing_test_gcc.png,
+ binary_priority_queue_random_int_push_timing_test_local.png,
+ binary_priority_queue_random_int_push_timing_test_msvc.png,
+ binomial_heap_tag.html,
+ ccgp_hash_random_int_subscript_timing_test_insert_gcc.png,
+ ccgp_hash_random_int_subscript_timing_test_insert_local.png,
+ ccgp_hash_random_int_subscript_timing_test_insert_msvc.png,
+ cc_hash_max_collision_check_resize_trigger.html,
+ cc_hash_random_int_find_timing_test_gcc.png,
+ cc_hash_random_int_find_timing_test_local.png,
+ cc_hash_random_int_find_timing_test_msvc.png,
+ cc_hash_random_int_subscript_timing_test_find_gcc.png,
+ cc_hash_random_int_subscript_timing_test_find_local.png,
+ cc_hash_random_int_subscript_timing_test_find_msvc.png,
+ cc_hash_random_int_subscript_timing_test_insert_gcc.png,
+ cc_hash_random_int_subscript_timing_test_insert_local.png,
+ cc_hash_random_int_subscript_timing_test_insert_msvc.png,
+ cc_hash_table.html, cc_hash_tag.html, checked_by_tidy.gif
+ concepts.html, contact.html, container_base.html,
+ container_cd.png, container_cd.svg, container_tag.html,
+ counter_lu_policy.html, design.html,
+ different_underlying_dss.png, direct_mask_range_hashing.html,
+ direct_mod_range_hashing.html, disclaimer.html, ds_gen.html,
+ embedded_lists_1.png, embedded_lists_2.png,
+ embedded_lists_3.png, examples.html, exceptions.html,
+ gp_hash_random_int_find_timing_test_gcc.png,
+ gp_hash_random_int_find_timing_test_local.png,
+ gp_hash_random_int_find_timing_test_msvc.png,
+ gp_hash_random_int_subscript_timing_test_find_gcc.png,
+ gp_hash_random_int_subscript_timing_test_find_local.png,
+ gp_hash_random_int_subscript_timing_test_find_msvc.png,
+ gp_hash_random_int_subscript_timing_test_insert_gcc.png,
+ gp_hash_random_int_subscript_timing_test_insert_local.png,
+ gp_hash_random_int_subscript_timing_test_insert_msvc.png,
+ gp_hash_table.html, gp_hash_tag.html,
+ hash_based_containers.html, hash_exponential_size_policy.html,
+ hash_load_check_resize_trigger.html, hash_policy_cd.png,
+ hash_prime_size_policy.html,
+ hash_random_int_erase_mem_usage_test_gcc.png,
+ hash_random_int_erase_mem_usage_test.html,
+ hash_random_int_erase_mem_usage_test_local.png,
+ hash_random_int_erase_mem_usage_test_msvc.png,
+ hash_random_int_find_find_timing_test.html,
+ hash_random_int_subscript_find_timing_test.html,
+ hash_random_int_subscript_insert_timing_test.html,
+ hash_ranged_hash_range_hashing_fns.png,
+ hash_range_hashing_seq_diagram2.png,
+ hash_range_hashing_seq_diagram.png,
+ hash_standard_resize_policy.html,
+ hash_text_find_find_timing_test.html,
+ hash_zlob_random_int_find_find_timing_test.html,
+ hash_zlob_random_int_find_timing_test_gcc.png,
+ hash_zlob_random_int_find_timing_test_local.png,
+ hash_zlob_random_int_find_timing_test_msvc.png, index.html,
+ insert_error.html, insert_resize_sequence_diagram1.png,
+ insert_resize_sequence_diagram2.png,
+ insert_resize_sequence_diagram3.png, interface.html,
+ introduction.html, invalidation_guarantee_cd.png,
+ invalidation_guarantee_erase.png, join_error.html,
+ linear_probe_fn.html, list_update.html, list_update_tag.html,
+ lu_based_containers.html, lu.png, misc.html, motivation.html,
+ move_to_front_lu_policy.html,
+ multimap_text_find_timing_test_large.html,
+ multimap_text_find_timing_test_large_s2p_hash_gcc.png,
+ multimap_text_find_timing_test_large_s2p_hash_local.png,
+ multimap_text_find_timing_test_large_s2p_hash_msvc.png,
+ multimap_text_find_timing_test_large_s2p_tree_gcc.png,
+ multimap_text_find_timing_test_large_s2p_tree_local.png,
+ multimap_text_find_timing_test_large_s2p_tree_msvc.png,
+ multimap_text_find_timing_test_small.html,
+ multimap_text_find_timing_test_small_s2p_hash_gcc.png,
+ multimap_text_find_timing_test_small_s2p_hash_local.png,
+ multimap_text_find_timing_test_small_s2p_hash_msvc.png,
+ multimap_text_find_timing_test_small_s2p_tree_gcc.png,
+ multimap_text_find_timing_test_small_s2p_tree_local.png,
+ multimap_text_find_timing_test_small_s2p_tree_msvc.png,
+ multimap_text_insert_mem_usage_test_large.html,
+ multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png,
+ multimap_text_insert_mem_usage_test_large_s2p_hash_local.png,
+ multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png,
+ multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png,
+ multimap_text_insert_mem_usage_test_large_s2p_tree_local.png,
+ multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png,
+ multimap_text_insert_mem_usage_test_small.html,
+ multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png,
+ multimap_text_insert_mem_usage_test_small_s2p_hash_local.png,
+ multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png,
+ multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png,
+ multimap_text_insert_mem_usage_test_small_s2p_tree_local.png,
+ multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png,
+ multimap_text_insert_timing_test_large.html,
+ multimap_text_insert_timing_test_large_s2p_hash_gcc.png,
+ multimap_text_insert_timing_test_large_s2p_hash_local.png,
+ multimap_text_insert_timing_test_large_s2p_hash_msvc.png,
+ multimap_text_insert_timing_test_large_s2p_tree_gcc.png,
+ multimap_text_insert_timing_test_large_s2p_tree_local.png,
+ multimap_text_insert_timing_test_large_s2p_tree_msvc.png,
+ multimap_text_insert_timing_test_small.html,
+ multimap_text_insert_timing_test_small_s2p_hash_gcc.png,
+ multimap_text_insert_timing_test_small_s2p_hash_local.png,
+ multimap_text_insert_timing_test_small_s2p_hash_msvc.png,
+ multimap_text_insert_timing_test_small_s2p_tree_gcc.png,
+ multimap_text_insert_timing_test_small_s2p_tree_local.png,
+ multimap_text_insert_timing_test_small_s2p_tree_msvc.png,
+ node_invariant_invalidations.png, node_invariants.png,
+ null_hash_fn.html, null_lu_metadata.html,
+ null_mapped_type.html, null_probe_fn.html,
+ null_tree_node_update.html, null_trie_node_update.html,
+ ov_tree_tag.html, pairing_heap_tag.html,
+ pairing_priority_queue_text_push_pop_timing_test_gcc.png,
+ pairing_priority_queue_text_push_pop_timing_test_local.png,
+ pairing_priority_queue_text_push_pop_timing_test_msvc.png,
+ pairing_priority_queue_text_push_timing_test_gcc.png,
+ pairing_priority_queue_text_push_timing_test_local.png,
+ pairing_priority_queue_text_push_timing_test_msvc.png,
+ pat_trie.png, pat_trie_tag.html,
+ point_invalidation_guarantee.html, point_iterators_cd.png,
+ point_iterators_range_ops_1.png,
+ point_iterators_range_ops_2.png, pq_container_traits.html,
+ pq_design.html, pq_different_underlying_dss.png,
+ pq_examples.html, pq_performance_tests.html,
+ pq_regression_tests.html, pq_tests.html, prerequisites.html,
+ priority_queue.html,
+ priority_queue_random_int_push_pop_timing_test_gcc.png,
+ priority_queue_random_int_push_pop_timing_test.html,
+ priority_queue_random_int_push_pop_timing_test_local.png,
+ priority_queue_random_int_push_pop_timing_test_msvc.png,
+ priority_queue_random_int_push_timing_test_gcc.png,
+ priority_queue_random_int_push_timing_test.html,
+ priority_queue_random_int_push_timing_test_local.png,
+ priority_queue_random_int_push_timing_test_msvc.png,
+ priority_queue_tag_cd.png, priority_queue_tag_cd.svg,
+ priority_queue_tag.html,
+ priority_queue_text_join_timing_test_gcc.png,
+ priority_queue_text_join_timing_test.html,
+ priority_queue_text_join_timing_test_local.png,
+ priority_queue_text_join_timing_test_msvc.png,
+ priority_queue_text_modify_down_timing_test_gcc.png,
+ priority_queue_text_modify_down_timing_test.html,
+ priority_queue_text_modify_down_timing_test_local.png,
+ priority_queue_text_modify_down_timing_test_msvc.png,
+ priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png,
+ priority_queue_text_modify_down_timing_test_pairing_thin_local.png,
+ priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png,
+ priority_queue_text_modify_up_timing_test_gcc.png,
+ priority_queue_text_modify_up_timing_test.html,
+ priority_queue_text_modify_up_timing_test_local.png,
+ priority_queue_text_modify_up_timing_test_msvc.png,
+ priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png,
+ priority_queue_text_modify_up_timing_test_pairing_thin_local.png,
+ priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png,
+ priority_queue_text_pop_mem_usage_test_gcc.png,
+ priority_queue_text_pop_mem_usage_test.html,
+ priority_queue_text_pop_mem_usage_test_local.png,
+ priority_queue_text_pop_mem_usage_test_msvc.png,
+ priority_queue_text_push_pop_timing_test_gcc.png,
+ priority_queue_text_push_pop_timing_test.html,
+ priority_queue_text_push_pop_timing_test_local.png,
+ priority_queue_text_push_pop_timing_test_msvc.png,
+ priority_queue_text_push_timing_test_gcc.png,
+ priority_queue_text_push_timing_test.html,
+ priority_queue_text_push_timing_test_local.png,
+ priority_queue_text_push_timing_test_msvc.png,
+ PythonPoweredSmall.gif quadratic_probe_fn.html,
+ random_int_find_find_timing_test_tree_gcc.png,
+ random_int_find_find_timing_test_tree_local.png,
+ random_int_find_find_timing_test_tree_msvc.png,
+ range_invalidation_guarantee.html,
+ rationale_null_node_updator.png, rb_tree_tag.html,
+ rc_binomial_heap_tag.html, references.html, resize_error.html,
+ resize_policy_cd.png, restoring_node_invariants.png,
+ sample_probe_fn.html, sample_ranged_hash_fn.html,
+ sample_ranged_probe_fn.html, sample_range_hashing.html,
+ sample_resize_policy.html, sample_resize_trigger.html,
+ sample_size_policy.html, sample_tree_node_update.html,
+ sample_trie_access_traits.html, sample_trie_node_update.html,
+ sample_update_policy.html, simple_list.png,
+ splay_tree_tag.html, tests.html,
+ text_find_timing_test_hash_gcc.png,
+ text_find_timing_test_hash_local.png,
+ text_find_timing_test_hash_msvc.png,
+ text_find_timing_test_tree_like_gcc.png,
+ text_find_timing_test_tree_like_local.png,
+ text_find_timing_test_tree_like_msvc.png, thin_heap_tag.html,
+ tree_based_containers.html, tree.html,
+ tree_node_iterator.html, tree_node_updator_policy_cd.png,
+ tree_order_statistics_node_update.html,
+ tree_order_statistics_timing_test_gcc.png,
+ tree_order_statistics_timing_test.html,
+ tree_order_statistics_timing_test_local.png,
+ tree_order_statistics_timing_test_msvc.png,
+ tree_random_int_find_find_timing_test.html,
+ tree_split_join_timing_test_gcc.png,
+ tree_split_join_timing_test.html,
+ tree_split_join_timing_test_local.png,
+ tree_split_join_timing_test_msvc.png, tree_tag.html,
+ tree_text_find_find_timing_test.html,
+ tree_text_insert_timing_test.html,
+ tree_text_insert_timing_test_node_tree_gcc.png,
+ tree_text_insert_timing_test_node_tree_local.png,
+ tree_text_insert_timing_test_node_tree_msvc.png,
+ tree_text_insert_timing_test_pat_trie_gcc.png,
+ tree_text_insert_timing_test_pat_trie_local.png,
+ tree_text_insert_timing_test_pat_trie_msvc.png,
+ tree_text_insert_timing_test_vector_tree_gcc.png,
+ tree_text_insert_timing_test_vector_tree_local.png,
+ tree_text_insert_timing_test_vector_tree_msvc.png,
+ tree_text_lor_find_find_timing_test.html,
+ tree_text_lor_find_timing_test_gcc.png,
+ tree_text_lor_find_timing_test_local.png,
+ tree_text_lor_find_timing_test_msvc.png,
+ trie_based_containers.html, trie_const_node_iterator.html,
+ trie.html, trie_node_iterator.html,
+ trie_node_updator_policy_cd.png,
+ trie_order_statistics_node_update.html,
+ trie_prefix_search_node_update.html,
+ trie_string_access_traits.html, trie_tag.html,
+ trivial_iterator_tag.html, tutorial.html,
+ update_policy_cd.png, update_seq_diagram.png): Remove.
+
2011-07-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/49813
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
${xml_dir}/manual/mt_allocator.xml \
${xml_dir}/manual/numerics.xml \
${xml_dir}/manual/parallel_mode.xml \
+ ${xml_dir}/manual/policy_data_structures.xml \
${xml_dir}/manual/prerequisites.xml \
${xml_dir}/manual/profile_mode.xml \
${xml_dir}/manual/shared_ptr.xml \
${xml_dir}/manual/strings.xml \
${xml_dir}/manual/support.xml \
${xml_dir}/manual/test.xml \
+ ${xml_dir}/manual/test_policy_data_structures.xml \
${xml_dir}/manual/using.xml \
${xml_dir}/manual/using_exceptions.xml \
${xml_dir}/manual/utilities.xml \
${xml_dir}/images/confdeps.pdf
XSLTPROC = xsltproc
-XSLTPROC_FLAGS = --nonet --xinclude
+XSLT_FLAGS = --nonet --xinclude
+XSLT_PARAM = --param toc.section.depth 4
#XSL_STYLE_DIR = /usr/share/xml/docbook/stylesheet/docbook-xsl-ns
#XSL_STYLE_DIR = /usr/share/sgml/docbook/xsl-ns-stylesheets
XSL_FO_STYLE = $(XSL_STYLE_DIR)/fo/docbook.xsl
# HTML, index plus chapters
stamp-html-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html files..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/html/ \
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${docbook_outdir}/html/ \
$(XSL_HTML_STYLE) ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-docbook
manual_html = ${docbook_outdir}/html/libstdc++-manual-single.html
stamp-html-single-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html single file..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${manual_html} \
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${manual_html} \
$(XSL_HTML_SINGLE_STYLE) ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-single-docbook
# FO
stamp-fo-docbook: $(xml_sources) ${docbook_outdir}/fo
@echo "Generating FO files..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/fo/spine.fo \
+ $(XSLTPROC) $(XSLT_FLAGS) -o ${docbook_outdir}/fo/spine.fo \
$(XSL_FO_STYLE) ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-fo-docbook
# Performance doc and graph configuration.
# Assumes pychart, beautiful soup installed.
# Generates the plots and graphs for performance testing.
+# XXX this needs to be re-worked to create only the SVG charts
doc_performance_script=${top_srcdir}/scripts/make_graphs.py
doc-html-performance:
-@(chmod + ${doc_performance_script}; \
${xml_dir}/manual/mt_allocator.xml \
${xml_dir}/manual/numerics.xml \
${xml_dir}/manual/parallel_mode.xml \
+ ${xml_dir}/manual/policy_data_structures.xml \
${xml_dir}/manual/prerequisites.xml \
${xml_dir}/manual/profile_mode.xml \
${xml_dir}/manual/shared_ptr.xml \
${xml_dir}/manual/strings.xml \
${xml_dir}/manual/support.xml \
${xml_dir}/manual/test.xml \
+ ${xml_dir}/manual/test_policy_data_structures.xml \
${xml_dir}/manual/using.xml \
${xml_dir}/manual/using_exceptions.xml \
${xml_dir}/manual/utilities.xml \
${xml_dir}/images/confdeps.png \
${xml_dir}/images/confdeps.pdf
-XSLTPROC_FLAGS = --nonet --xinclude
+XSLT_FLAGS = --nonet --xinclude
+XSLT_PARAM = --param toc.section.depth 4
#XSL_STYLE_DIR = /usr/share/xml/docbook/stylesheet/docbook-xsl-ns
#XSL_STYLE_DIR = /usr/share/sgml/docbook/xsl-ns-stylesheets
XSL_FO_STYLE = $(XSL_STYLE_DIR)/fo/docbook.xsl
# Performance doc and graph configuration.
# Assumes pychart, beautiful soup installed.
# Generates the plots and graphs for performance testing.
+# XXX this needs to be re-worked to create only the SVG charts
doc_performance_script = ${top_srcdir}/scripts/make_graphs.py
# By adding these files here, automake will remove them for 'make clean'
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
# HTML, index plus chapters
stamp-html-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html files..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/html/ \
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${docbook_outdir}/html/ \
$(XSL_HTML_STYLE) ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-docbook
doc-html-docbook: stamp-html-docbook
stamp-html-single-docbook: $(xml_sources) ${docbook_outdir}/html
@echo "Generating html single file..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${manual_html} \
+ $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${manual_html} \
$(XSL_HTML_SINGLE_STYLE) ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-html-single-docbook
# FO
stamp-fo-docbook: $(xml_sources) ${docbook_outdir}/fo
@echo "Generating FO files..."
- $(XSLTPROC) $(XSLTPROC_FLAGS) -o ${docbook_outdir}/fo/spine.fo \
+ $(XSLTPROC) $(XSLT_FLAGS) -o ${docbook_outdir}/fo/spine.fo \
$(XSL_FO_STYLE) ${top_srcdir}/doc/xml/spine.xml
$(STAMP) stamp-fo-docbook
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Acknowledgments</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Acknowledgments</h1>
-
- <ol>
- <li>This library was partially written at <a href=
- "http://www.haifa.il.ibm.com/">IBM's Haifa Research
- Labs</a>.</li>
-
- <li>The library is based heavily on policy-based design and
- uses many useful techniques from [<a href=
- "references.html#alexandrescu01modern">alexandrescu01modern</a>].</li>
-
- <li>Two ideas are borrowed from the SGI-STL implementation
- [<a href="references.html#sgi_stl">sgi_stl</a>]:
-
- <ol>
- <li>The prime-based resize policies use a list of primes
- taken from the SGI-STL implementation.</li>
-
- <li>The red-black trees contain both a root node and a
- header node (containing metadata), connected in a way
- that forward and reverse iteration can be performed
- efficiently.</li>
- </ol>
- </li>
-
- <li>Some test utilities borrow ideas from [<a href=
- "references.html#boost_timer">boost_timer</a>].</li>
-
- <li>We would like to thank Scott Meyers for useful comments
- (without attributing to him any flaws in the design or
- implementation of the library).</li>
-
- <li>Much of the documentation is <a href=
- "http://www.python.org/"><img src="PythonPoweredSmall.gif"
- align="middle" width="55" height="22" alt="[Python Powered]"
- border="0" /></a> (especially through <a href=
- "http://home.gna.org/pychart/">PyChart</a>, <a href=
- "http://www.crummy.com/software/BeautifulSoup/">Beautiful
- Soup</a>, and <a href=
- "http://starship.python.net/crew/aaron_watters/kjbuckets/">kjbuckets</a>)
- and uses <a href="http://tidy.sourceforge.net/"><img src=
- "checked_by_tidy.gif" align="middle" width="55" height="45"
- alt="[HTML tidy]" border="0" /></a>. The CSS-driven menus are
- slightly modified from <a href=
- "http://www.brothercake.com/scripts/navmeister/page.php">Brothercake</a>
- (hopefully without introducing errors).</li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="11in"
- height="8.5in"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.43"
- version="1.0"
- sodipodi:docbase="/mnt/share/src/policy_based_data_structures/pb_ds_images"
- sodipodi:docname="assoc_tag_diagram_2.svg"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/pb_ds_images/assoc_tag_diagram_2.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path3311"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
- transform="scale(0.4)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Sstart"
- style="overflow:visible">
- <path
- id="path3319"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(0.3,0,0,0.3,-1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Sstart"
- style="overflow:visible">
- <path
- id="path3337"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(0.2,0.2)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Send"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Send"
- style="overflow:visible">
- <path
- id="path3316"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.3,0,0,-0.3,1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mend"
- style="overflow:visible">
- <path
- id="path3322"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.6,0,0,-0.6,3,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3346"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(-0.8,-0.8)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lstart"
- style="overflow:visible">
- <path
- id="path3331"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(1.1,0,0,1.1,-5.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lend"
- style="overflow:visible">
- <path
- id="path3328"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2"
- inkscape:cx="613.85775"
- inkscape:cy="310.05621"
- inkscape:document-units="in"
- inkscape:current-layer="layer1"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1278"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
- gridtolerance="0.125in"
- guidetolerance="0.125in">
- <sodipodi:guide
- orientation="horizontal"
- position="629"
- id="guide1307" />
- <sodipodi:guide
- orientation="horizontal"
- position="449"
- id="guide1309" />
- <sodipodi:guide
- orientation="horizontal"
- position="269"
- id="guide1311" />
- <sodipodi:guide
- orientation="vertical"
- position="496"
- id="guide1313" />
- <sodipodi:guide
- orientation="vertical"
- position="361"
- id="guide1315" />
- <sodipodi:guide
- orientation="vertical"
- position="226"
- id="guide1317" />
- <sodipodi:guide
- orientation="vertical"
- position="631"
- id="guide1319" />
- <sodipodi:guide
- orientation="vertical"
- position="766"
- id="guide1321" />
- <sodipodi:guide
- orientation="vertical"
- position="91"
- id="guide1345" />
- <sodipodi:guide
- orientation="vertical"
- position="901"
- id="guide1347" />
- <sodipodi:guide
- orientation="horizontal"
- position="539"
- id="guide3390" />
- <sodipodi:guide
- orientation="horizontal"
- position="359"
- id="guide3392" />
- <sodipodi:guide
- orientation="vertical"
- position="280.5"
- id="guide3324" />
- <sodipodi:guide
- orientation="vertical"
- position="172"
- id="guide3326" />
- <sodipodi:guide
- orientation="vertical"
- position="427"
- id="guide3328" />
- <sodipodi:guide
- orientation="vertical"
- position="711.5"
- id="guide3340" />
- <sodipodi:guide
- orientation="horizontal"
- position="179"
- id="guide1395" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Benjamin Kosnik</dc:title>
- </cc:Agent>
- </dc:creator>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <rect
- y="562.32806"
- x="237.8916"
- height="23.200001"
- width="80.769417"
- id="rect1495"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1497"
- width="80.769417"
- height="23.200001"
- x="132.8916"
- y="562.32806" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1493"
- width="80.769417"
- height="23.200001"
- x="21.891602"
- y="562.32806" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1425"
- width="141.64481"
- height="23.200001"
- x="209.57762"
- y="382.56177" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3378"
- width="141.64481"
- height="23.200001"
- x="640.77765"
- y="382.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;stroke-miterlimit:4;stroke-dasharray:none"
- x="710.40002"
- y="397.09772"
- id="use1337"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1391"
- x="710.40003"
- y="397.09772">basic_hash_table_tag</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="280"
- y="397.09772"
- id="text1339"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1385"
- x="280"
- y="397.09772">basic_tree_tag</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3418"
- width="141.64481"
- height="23.200001"
- x="101.57762"
- y="472.5618" />
- <rect
- y="472.5618"
- x="317.57761"
- height="23.200001"
- width="141.64481"
- id="rect3420"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="171.20001"
- y="486.29773"
- id="text3394"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1387"
- x="171.20001"
- y="486.29773">tree_tag</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3400"
- y="486.29773"
- x="388.39999"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1389"
- x="388.39999"
- y="486.29773">trie_tag</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3380"
- width="141.64481"
- height="23.200001"
- x="425.57764"
- y="292.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.5625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="495.20001"
- y="307.09772"
- id="text1323"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1384"
- x="495.20001"
- y="307.09772">associative_container_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
- d="M 170.97058,472.5 L 170.97058,451 L 387.51871,450 L 387.51871,472.5"
- id="path2244" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 280.5,450.53297 L 280.5,410.62445"
- id="path3332" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3422"
- width="141.64481"
- height="23.200001"
- x="533.57764"
- y="472.5618" />
- <rect
- y="472.5618"
- x="748.77765"
- height="23.200001"
- width="141.64481"
- id="rect3424"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3406"
- y="486.29773"
- x="601.20001"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1393"
- x="601.20001"
- y="486.29773">cc_hash_table_tag</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="818"
- y="486.29773"
- id="text3412"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1395"
- x="818"
- y="486.29773">gp_hash_table_tag</tspan></text>
- <path
- id="path3353"
- d="M 601.47058,472.5 L 601.47058,451 L 818.01871,450 L 818.01871,472.5"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
- <path
- id="path3355"
- d="M 711,450.53297 L 711,410.62445"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3344"
- d="M 281.18218,383.28102 L 281.18218,361.78102 L 711.79281,360.78102 L 711.79281,383.28102"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
- <rect
- y="383.1962"
- x="425.625"
- height="23.200001"
- width="141.64481"
- id="rect3376"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="use1329"
- y="397.73215"
- x="497.24741"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1382"
- x="497.24741"
- y="397.73215">list_update_tag</tspan></text>
- <path
- id="path3347"
- d="M 497.79886,384.13056 L 497.79886,323.40547"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="61.152512"
- y="577.07874"
- id="text1423"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1418"
- x="61.152512"
- y="577.07874">rb_tree_tag</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text1427"
- y="577.07874"
- x="277.95251"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1414"
- x="277.95252"
- y="577.07874">splay_tree_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
- d="M 61.42308,563.28102 L 61.42308,541.78102 L 277.97121,540.78102 L 277.97121,563.28102"
- id="path1431" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 170.9525,561.5357 L 170.9525,503.81235"
- id="path1433" />
- <rect
- y="562.17499"
- x="347.8916"
- height="23.200001"
- width="80.769417"
- id="rect1469"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.94391561;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text1471"
- y="576.71094"
- x="388.80002"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1412"
- x="388.80002"
- y="576.71094">pat_trie_tag</tspan></text>
- <path
- id="path1475"
- d="M 389.35146,563.10936 L 389.35146,502.38427"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="173.95251"
- y="577.07874"
- id="text1487"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1416"
- x="173.95251"
- y="577.07874">ov_tree_tag</tspan></text>
- </g>
-</svg>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>container_traits Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>container_traits</tt> Interface</h1>
-
- <p>Traits of an associative-container based on its underlying
- data structure.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cntnr59189" id="Cntnr59189"><b>class</b> Cntnr</a>
-</pre>
- </td>
-
- <td>
- <p>Container type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Container Attributes</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="invalidation_guarantee3793555937" id=
-"invalidation_guarantee3793555937">invalidation_guarantee</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Invalidation guarantee.
-</pre>
- </td>
-
- <td>
- <p>Invalidation-guarantee type.</p>
-
- <p>This is either <a href=
- "basic_invalidation_guarantee.html"><span class=
- "c2"><tt>basic_invalidation_guarantee</tt></span></a>,
- <a href="point_invalidation_guarantee.html"><span class=
- "c2"><tt>point_invalidation_guarantee</tt></span></a>, or
- <a href="range_invalidation_guarantee.html"><span class=
- "c2"><tt>range_invalidation_guarantee</tt></span></a></p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="order_preserving1910229172" id=
-"order_preserving1910229172">order_preserving</a>
-</pre>
- </td>
-
- <td>
- <pre>
-True only if Cntnr objects guarantee storing keys by order.
-</pre>
- </td>
-
- <td>
- <p>Order-preserving indicator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="erase_can_throw153323856" id=
-"erase_can_throw153323856">erase_can_throw</a>
-</pre>
- </td>
-
- <td>
- <pre>
-True only if erasing a key can throw.
-</pre>
- </td>
-
- <td>
- <p>Erase-throw indicator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reverse_iteration894617078" id=
-"reverse_iteration894617078">reverse_iteration</a>
-</pre>
- </td>
-
- <td>
- <pre>
-True only reverse iterators are supported.
-</pre>
- </td>
-
- <td>
- <p>Reverse iteration indicator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="split_join_can_throw3200477759" id=
-"split_join_can_throw3200477759">split_join_can_throw</a>
-</pre>
- </td>
-
- <td>
- <pre>
-True only if split or join operations can throw.
-</pre>
- </td>
-
- <td>
- <p>Split-join throw indicator.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Associative Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Associative-Container Design</h1>
-
- <ol>
- <li><a href="ds_gen.html">Data-Structure Genericity</a></li>
-
- <li class="c1">Genericity discusses generic manipulation of
- containers based on different underlying
- data structures.</li>
-
- <li class="c1">Genericity discusses generic manipulation of
- containers with different mapping semantics.</li>
-
- <li><a href="tree_based_containers.html">Tree-Based
- Containers</a> describes the design and policies of
- tree-based containers.</li>
-
- <li><a href="trie_based_containers.html">Trie-Based
- Containers</a> describes the design and policies of
- trie-based containers.</li>
-
- <li><a href="hash_based_containers.html">Hash-Based
- Containers</a> describes the design and policies of
- hash-based containers.</li>
-
- <li><a href="lu_based_containers.html">List-Based
- Containers</a> describes the design and policies of
- list-based containers with update policies.</li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Examples</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Associative-Container Examples</h1>
-
- <h2><a name="basic_usage" id="basic_usage">Basic Use</a></h2>
-
- <ol>
- <li>
- <a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_map.cc"><tt>basic_map.cc</tt></a>
- Basic use of "maps".</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_set.cc"><tt>basic_set.cc</tt></a>
- Basic use of "sets".</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/erase_if.cc"><tt>erase_if.cc</tt></a>
- Conditionally erasing values from a container object.</li>
- </ol>
-
- <h2><a name="generics" id="generics">Generics</a></h2>
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/assoc_container_traits.cc"><tt>assoc_container_traits.cc</tt></a>
- Using <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a> to query
- about underlying data structure behavior.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_find_neg.cc"><tt>hash_find_neg.cc</tt></a>
- A non-compiling example showing wrong use of finding keys in
- hash-based containers.</li>
- </ol>
-
- <h2><a name="hash_based" id="hash_based">Hash-Based
- Containers</a></h2>
-
-
- <h3><a name="resize_related" id="resize_related">Resize
- Related</a></h3>
-
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_initial_size.cc"><tt>hash_initial_size.cc</tt></a>
- Setting the initial size of a hash-based container
- object.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc"><tt>hash_resize_neg.cc</tt></a>
- A non-compiling example showing how not to resize a
- hash-based container object.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_resize.cc"><tt>hash_resize.cc</tt></a>
- Resizing the size of a hash-based container object.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_illegal_resize.cc"><tt>hash_illegal_resize.cc</tt></a>
- Showing an illegal resize of a hash-based container
- object.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_load_set_change.cc"><tt>hash_load_set_change.cc</tt></a>
- Changing the load factors of a hash-based container
- object.</li>
- </ol>
-
- <h3><a name="hash_related" id="hash_related">Hash-Function
- Related</a></h3>
-
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_mod.cc"><tt>hash_mod.cc</tt></a>
- Using a modulo range-hashing function for the case of an
- unknown skewed key distribution.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_shift_mask.cc"><tt>shift_mask.cc</tt></a>
- Writing a range-hashing functor for the case of a known
- skewed key distribution.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/store_hash.cc"><tt>store_hash.cc</tt></a>
- Storing the hash value along with each key.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/ranged_hash.cc"><tt>ranged_hash.cc</tt></a>
- Writing a ranged-hash functor.</li>
- </ol>
-
- <h2><a name="tree_like_based" id= "tree_like_based">Tree-Like Containers (Trees and
- Tries)</a></h2>
-
-
- <h3><a name="node_invariants" id=
- "node_invariants">Node-Invariants</a></h3>
-
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc"><tt>tree_order_statistics.cc</tt></a>
- Using trees for order statistics.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_intervals.cc"><tt>tree_intervals.cc</tt></a>
- Augmenting trees to support operations on line
- intervals.</li>
- </ol>
-
- <h3><a name="split_join" id="split_join">Split and
- Join</a></h3>
-
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_join.cc"><tt>tree_join.cc</tt></a>
- Joining two tree-based container objects.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/trie_split.cc"><tt>trie_split.cc</tt></a>
- Splitting a PATRICIA trie container object.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_order_statistics_join.cc"><tt>tree_order_statistics_join.cc</tt></a>
- Order statistics while joining two tree-based container
- objects.</li>
- </ol>
-
- <h2><a name="trie_based" id="trie_based">Trie-Based
- Containers</a></h2>
-
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/trie_dna.cc"><tt>trie_dna.cc</tt></a>
- Using a PATRICIA trie for DNA strings.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc"><tt>trie_prefix_search.cc</tt></a>
- Using a PATRICIA trie for finding all entries whose key
- matches a given prefix.</li>
- </ol>
-
- <h2><a name="mmaps" id="mmaps">"Multimaps" and
- "Multisets".</a></h2>
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_multimap.cc"><tt>basic_multimap.cc</tt></a>
- Basic use of "multimaps".</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_multiset.cc"><tt>basic_multiset.cc</tt></a>
- Basic use of "multisets".</li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Associative-Container Performance Tests</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1><a name="assoc" id="assoc">Associative-Container
- Performance Tests</a></h1>
-<h2><a name="settings" id="settings">Settings</a></h2>
-<p>This section describes performance tests and their results.
- In the following, <a href="#gcc"><u>g++</u></a>, <a href="#msvc"><u>msvc++</u></a>, and <a href="#local"><u>local</u></a> (the build used for generating this
- documentation) stand for three different builds:</p>
-<div id="gcc_settings_div">
-<div class="c1">
-<h3><a name="gcc" id="gcc"><u>g++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.644</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform -
- Linux-2.6.12-9-386-i686-with-debian-testing-unstable</li>
-<li>Compiler - g++ (GCC) 4.0.2 20050808 (prerelease)
- (Ubuntu 4.0.1-4ubuntu9) Copyright (C) 2005 Free Software
- Foundation, Inc. This is free software; see the source
- for copying conditions. There is NO warranty; not even
- for MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="msvc_settings_div">
-<div class="c1">
-<h3><a name="msvc" id="msvc"><u>msvc++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.554</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform - Windows XP Pro</li>
-<li>Compiler - Microsoft (R) 32-bit C/C++ Optimizing
- Compiler Version 13.10.3077 for 80x86 Copyright (C)
- Microsoft Corporation 1984-2002. All rights
- reserved.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="local_settings_div"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h3><a name = "local"><u>local</u></a></h3><ul>
-<li>CPU speed - cpu MHz : 2250.000</li>
-<li>Memory - MemTotal: 2076248 kB</li>
-<li>Platform - Linux-2.6.16-1.2133_FC5-i686-with-redhat-5-Bordeaux</li>
-<li>Compiler - g++ (GCC) 4.1.1 20060525 (Red Hat 4.1.1-1)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-</li>
-</ul>
-</div><div style = "width: 100%; height: 20px"></div></div>
-<h2><a name="assoc_tests" id="assoc_tests">Tests</a></h2>
-<h3><a name="hash_based" id="hash_based">Hash-Based
- Containers</a></h3>
-<ol>
-<li><a href="hash_text_find_find_timing_test.html">Hash-Based
- Text <tt>find</tt> Find Timing Test</a></li>
-<li><a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a></li>
-<li><a href="hash_random_int_subscript_find_timing_test.html">Hash-Based
- Random-Integer Subscript Find Timing Test</a></li>
-<li><a href="hash_random_int_subscript_insert_timing_test.html">Hash-Based
- Random-Integer Subscript Insert Timing Test</a></li>
-<li><a href="hash_zlob_random_int_find_find_timing_test.html">Hash-Based
- Skewed-Distribution Random-Integer <tt>find</tt> Find Timing
- Test</a></li>
-<li><a href="hash_random_int_erase_mem_usage_test.html">Hash-Based Erase
- Memory Use Test</a></li>
-</ol>
-<h3><a name="tree_like_based" id="tree_like_based">Tree-Like-Based Containers</a></h3>
-<ol>
-<li><a href="tree_text_insert_timing_test.html">Tree-Based
- and Trie-Based Text Insert Timing Test</a></li>
-<li><a href="tree_text_find_find_timing_test.html">Tree-Based
- and Trie-Based Text <tt>find</tt> Find Timing Test</a></li>
-<li><a href="tree_text_lor_find_find_timing_test.html">Tree-Based
- Locality-of-Reference Text <tt>find</tt> Find Timing
- Test</a></li>
-<li><a href="tree_random_int_find_find_timing_test.html">Tree-Based
- Random-Integer <tt>find</tt> Find Timing Test</a></li>
-<li><a href="tree_split_join_timing_test.html">Tree Split and
- Join Timing Test</a></li>
-<li><a href="tree_order_statistics_timing_test.html">Tree
- Order-Statistics Timing Test</a></li>
-</ol>
-<h3><a name="multimaps" id="multimaps">Multimaps</a></h3>
-<ol>
-<li><a href="multimap_text_find_timing_test_small.html">"Multimap"
- Text Find Timing Test with <u>Small</u> Average Secondary-Key
- to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_find_timing_test_large.html">"Multimap"
- Text Find Timing Test with <u>Large</u> Average Secondary-Key
- to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_timing_test_small.html">"Multimap"
- Text Insert Timing Test with <u>Small</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_timing_test_large.html">"Multimap"
- Text Insert Timing Test with <u>Large</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_mem_usage_test_small.html">"Multimap"
- Text Insert Memory-Use Test with <u>Small</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-<li><a href="multimap_text_insert_mem_usage_test_large.html">"Multimap"
- Text Insert Memory-Use Test with <u>Large</u> Average
- Secondary-Key to Primary-Key Ratio</a></li>
-</ol>
-<h2><a name="assoc_observations" id="assoc_observations">Observations</a></h2>
-<h3><a name="dss_family_choice" id="dss_family_choice">Underlying Data-Structure Families</a></h3>
-<p>In general, hash-based containers (see <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>) have better timing
- performance than containers based on different underlying-data
- structures. The main reason to choose a tree-based (see
- <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>) or trie-based container
- (see <a href="trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>) is if a byproduct of the
- tree-like structure is required: either order-preservation, or
- the ability to utilize node invariants (see <a href="tree_based_containers.html#invariants">Design::Associative
- Containers::Tree-Based Containers::Node Invariants</a> and
- <a href="trie_based_containers.html#invariants">Design::Associative
- Containers::Trie-Based Containers::Node Invariants</a>). If
- memory-use is the major factor, an ordered-vector tree (see
- <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>) gives optimal results
- (albeit with high modificiation costs), and a list-based
- container (see <a href="lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>) gives reasonable
- results.</p>
-<h3><a name="hash_based_types" id="hash_based_types">Hash-Based
- Container Types</a></h3>
-<p>Hash-based containers are typically either collision
- chaining or probing (see <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>). Collision-chaining
- containers are more flexible internally, and so offer better
- timing performance. Probing containers, if used for simple
- value-types, manage memory more efficiently (they perform far
- fewer allocation-related calls). In general, therefore, a
- collision-chaining table should be used. A probing container,
- conversely, might be used efficiently for operations such as
- eliminating duplicates in a sequence, or counting the number of
- occurrences within a sequence. Probing containers might be more
- useful also in multithreaded applications where each thread
- manipulates a hash-based container: in the STL, allocators have
- class-wise semantics (see [<a href="references.html#meyers96more">meyers96more</a>] - Item 10); a
- probing container might incur less contention in this case.</p>
-<h3><a name="hash_based_policies" id="hash_based_policies">Hash-Based Containers' Policies</a></h3>
-<p>In hash-based containers, the range-hashing scheme (see
- <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a>) seems to
- affect performance more than other considerations. In most
- settings, a mask-based scheme works well (or can be made to
- work well). If the key-distribution can be estimated a-priori,
- a simple hash function can produce nearly uniform hash-value
- distribution. In many other cases (<i>e.g.</i>, text hashing,
- floating-point hashing), the hash function is powerful enough
- to generate hash values with good uniformity properties
- [<a href="references.html#knuth98sorting">knuth98sorting</a>];
- a modulo-based scheme, taking into account all bits of the hash
- value, appears to overlap the hash function in its effort.</p>
-<p>The range-hashing scheme determines many of the other
- policies (see <a href="hash_based_containers.html#policy_interaction">Design::Hash-Based
- Containers::Policy Interaction</a>). A mask-based scheme works
- well with an exponential-size policy (see <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>) ; for
- probing-based containers, it goes well with a linear-probe
- function (see <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a>).</p>
-<p>An orthogonal consideration is the trigger policy (see
- <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>). This
- presents difficult tradeoffs. <i>E.g.</i>, different load
- factors in a load-check trigger policy yield a
- space/amortized-cost tradeoff.</p>
-<h3><a name="tree_like_based_types" id="tree_like_based_types">Tree-Like-Based Container
- Types</a></h3>
-<p>In general, there are several families of tree-based
- underlying data structures: balanced node-based trees
- (<i>e.g.</i>, red-black or AVL trees), high-probability
- balanced node-based trees (<i>e.g.</i>, random treaps or
- skip-lists), competitive node-based trees (<i>e.g.</i>, splay
- trees), vector-based "trees", and tries. (Additionally, there
- are disk-residing or network-residing trees, such as B-Trees
- and their numerous variants. An interface for this would have
- to deal with the execution model and ACID guarantees; this is
- out of the scope of this library.) Following are some
- observations on their application to different settings.</p>
-<p>Of the balanced node-based trees, this library includes a
- red-black tree (see <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>), as does STL (in
- practice). This type of tree is the "workhorse" of tree-based
- containers: it offers both reasonable modification and
- reasonable lookup time. Unfortunately, this data structure
- stores a huge amount of metadata. Each node must contain,
- besides a value, three pointers and a boolean. This type might
- be avoided if space is at a premium [<a href="references.html#austern00noset">austern00noset</a>].</p>
-<p>High-probability balanced node-based trees suffer the
- drawbacks of deterministic balanced trees. Although they are
- fascinating data structures, preliminary tests with them showed
- their performance was worse than red-black trees. The library
- does not contain any such trees, therefore.</p>
-<p>Competitive node-based trees have two drawbacks. They are
- usually somewhat unbalanced, and they perform a large number of
- comparisons. Balanced trees perform one comparison per each
- node they encounter on a search path; a splay tree performs two
- comparisons. If the keys are complex objects, <i>e.g.</i>,
- <tt>std::string</tt>, this can increase the running time.
- Conversely, such trees do well when there is much locality of
- reference. It is difficult to determine in which case to prefer
- such trees over balanced trees. This library includes a splay
- tree (see <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>).</p>
-<p>Ordered-vector trees (see <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>) use very little space
- [<a href="references.html#austern00noset">austern00noset</a>].
- They do not have any other advantages (at least in this
- implementation).</p>
-<p>Large-fan-out PATRICIA tries (see <a href="trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>) have excellent lookup
- performance, but they do so through maintaining, for each node,
- a miniature "hash-table". Their space efficiency is low, and
- their modification performance is bad. These tries might be
- used for semi-static settings, where order preservation is
- important. Alternatively, red-black trees cross-referenced with
- hash tables can be used. [<a href="references.html#okasaki98mereable">okasaki98mereable</a>]
- discusses small-fan-out PATRICIA tries for integers, but the
- cited results seem to indicate that the amortized cost of
- maintaining such trees is higher than that of balanced trees.
- Moderate-fan-out trees might be useful for sequences where each
- element has a limited number of choices, <i>e.g.</i>, DNA
- strings (see <a href="assoc_examples.html#trie_based">Examples::Associative
- Containers::Trie-Based Containers</a>).</p>
-<h3><a name="msc" id="msc">Mapping-Semantics
- Considerations</a></h3>
-<p>Different mapping semantics were discussed in <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a> and
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>. We
- will focus here on the case where a keys can be composed into
- primary keys and secondary keys. (In the case where some keys
- are completely identical, it is trivial that one should use an
- associative container mapping values to size types.) In this
- case there are (at least) five possibilities:</p>
-<ol>
-<li>Use an associative container that allows equivalent-key
- values (such as <tt>std::multimap</tt>)</li>
-<li>Use a unique-key value associative container that maps
- each primary key to some complex associative container of
- secondary keys, say a tree-based or hash-based container (see
- <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a> and <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>)</li>
-<li>Use a unique-key value associative container that maps
- each primary key to some simple associative container of
- secondary keys, say a list-based container (see <a href="lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>)</li>
-<li>Use a unique-key value associative container that maps
- each primary key to some non-associative container
- (<i>e.g.</i>, <tt>std::vector</tt>)</li>
-<li>Use a unique-key value associative container that takes
- into account both primary and secondary keys.</li>
-</ol>
-<p>We do not think there is a simple answer for this (excluding
- option 1, which we think should be avoided in all cases).</p>
-<p>If the expected ratio of secondary keys to primary keys is
- small, then 3 and 4 seem reasonable. Both types of secondary
- containers are relatively lightweight (in terms of memory use
- and construction time), and so creating an entire container
- object for each primary key is not too expensive. Option 4
- might be preferable to option 3 if changing the secondary key
- of some primary key is frequent - one cannot modify an
- associative container's key, and the only possibility,
- therefore, is erasing the secondary key and inserting another
- one instead; a non-associative container, conversely, can
- support in-place modification. The actual cost of erasing a
- secondary key and inserting another one depends also on the
- allocator used for secondary associative-containers (The tests
- above used the standard allocator, but in practice one might
- choose to use, <i>e.g.</i>, [<a href="references.html#boost_pool">boost_pool</a>]). Option 2 is
- definitely an overkill in this case. Option 1 loses out either
- immediately (when there is one secondary key per primary key)
- or almost immediately after that. Option 5 has the same
- drawbacks as option 2, but it has the additional drawback that
- finding all values whose primary key is equivalent to some key,
- might be linear in the total number of values stored (for
- example, if using a hash-based container).</p>
-<p>If the expected ratio of secondary keys to primary keys is
- large, then the answer is more complicated. It depends on the
- distribution of secondary keys to primary keys, the
- distribution of accesses according to primary keys, and the
- types of operations most frequent.</p>
-<p>To be more precise, assume there are <i>m</i> primary keys,
- primary key <i>i</i> is mapped to <i>n<sub>i</sub></i>
- secondary keys, and each primary key is mapped, on average, to
- <i>n</i> secondary keys (<i>i.e.</i>,
- <i><b>E</b>(n<sub>i</sub>) = n</i>).</p>
-<p>Suppose one wants to find a specific pair of primary and
- secondary keys. Using 1 with a tree based container
- (<tt>std::multimap</tt>), the expected cost is
- <i><b>E</b>(Θ(log(m) + n<sub>i</sub>)) = Θ(log(m) +
- n)</i>; using 1 with a hash-based container
- (<tt>std::tr1::unordered_multimap</tt>), the expected cost is
- <i>Θ(n)</i>. Using 2 with a primary hash-based container
- and secondary hash-based containers, the expected cost is
- <i>O(1)</i>; using 2 with a primary tree-based container and
- secondary tree-based containers, the expected cost is (using
- the Jensen inequality [<a href="references.html#motwani95random">motwani95random</a>])
- <i><b>E</b>(O(log(m) + log(n<sub>i</sub>)) = O(log(m)) +
- <b>E</b>(O(log(n<sub>i</sub>)) = O(log(m)) + O(log(n))</i>,
- assuming that primary keys are accessed equiprobably. 3 and 4
- are similar to 1, but with lower constants. Using 5 with a
- hash-based container, the expected cost is <i>O(1)</i>; using 5
- with a tree based container, the cost is
- <i><b>E</b>(Θ(log(mn))) = Θ(log(m) +
- log(n))</i>.</p>
-<p>Suppose one needs the values whose primary key matches some
- given key. Using 1 with a hash-based container, the expected
- cost is <i>Θ(n)</i>, but the values will not be ordered
- by secondary keys (which may or may not be required); using 1
- with a tree-based container, the expected cost is
- <i>Θ(log(m) + n)</i>, but with high constants; again the
- values will not be ordered by secondary keys. 2, 3, and 4 are
- similar to 1, but typically with lower constants (and,
- additionally, if one uses a tree-based container for secondary
- keys, they will be ordered). Using 5 with a hash-based
- container, the cost is <i>Θ(mn)</i>.</p>
-<p>Suppose one wants to assign to a primary key all secondary
- keys assigned to a different primary key. Using 1 with a
- hash-based container, the expected cost is <i>Θ(n)</i>,
- but with very high constants; using 1 with a tree-based
- container, the cost is <i>Θ(nlog(mn))</i>. Using 2, 3,
- and 4, the expected cost is <i>Θ(n)</i>, but typically
- with far lower costs than 1. 5 is similar to 1.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Associative-Container Regression Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-<base href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/regression/">
- </head>
-
-<body>
- <div id="page">
- <h1>Associative-Container Regression Tests</h1>
-
- <h2><a name="assoc_desc" id="assoc_desc">Description</a></h2>
-
- <p>The library contains a single comprehensive regression test.
- For a given container type in <tt>pb_ds</tt>, the test creates
- an object of the container type and an object of the
- corresponding STL type (<i>e.g.</i>, <tt>std::set</tt>). It
- then performs a random sequence of methods with random
- arguments (<i>e.g.</i>, inserts, erases, and so forth) on both
- objects. At each operation, the test checks the return value of
- the method, and optionally both compares <tt>pb_ds</tt>'s
- object with the STL's object as well as performing other
- consistency checks on <tt>pb_ds</tt>'s object (<i>e.g.</i>,
- order preservation, when applicable, or node invariants, when
- applicable).</p>
-
- <p>Additionally, the test integrally checks exception safety
- and resource leaks. This is done as follows. A special
- allocator type, written for the purpose of the test, both
- randomly throws an exceptions when allocations are performed,
- and tracks allocations and de-allocations. The exceptions thrown
- at allocations simulate memory-allocation failures; the
- tracking mechanism checks for memory-related bugs (<i>e.g.</i>,
- resource leaks and multiple de-allocations). Both
- <tt>pb_ds</tt>'s containers and the containers' value-types are
- configured to use this allocator.</p>
-
- <p>Due to compiler constraints, the test is split into the
- several sources, each checking only some containers.</p>
-
- <h2><a name="assoc_tests" id="assoc_tests">Tests</a></h2>
-
- <h3><a name="assoc_tests_set" id="assoc_tests_set">"Set"
- Tests</a></h3>
-
- <p>The following check all "set" types:</p>
-
- <ol>
- <li><a href=
- "hash_no_data_map_rand.cc"><tt>hash_no_data_map_rand.cc</tt></a>
- checks all hash-based "set" types.</li>
-
- <li><a href=
- "list_update_no_data_map_rand.cc"><tt>list_update_no_data_map_rand.cc</tt></a>
- checks all list-based "set" types.</li>
-
- <li><a href=
- "tree_no_data_map_rand.cc"><tt>tree_no_data_map_rand.cc</tt></a>
- checks all tree-based "set" types.</li>
-
- <li><a href=
- "trie_no_data_map_rand.cc"><tt>trie_no_data_map_rand.cc</tt></a>
- checks all PATRICIA-trie-based "set" types.</li>
- </ol>
-
- <h3><a name="assoc_tests_map" id="assoc_tests_map">"Map"
- Tests</a></h3>
-
- <p>The following check all "map" types:</p>
-
- <ol>
- <li><a href= "hash_data_map_rand.cc"><tt>hash_data_map_rand.cc</tt></a>
- checks all hash-based "map" types.</li>
-
- <li><a href= "list_update_data_map_rand.cc"><tt>list_update_data_map_rand.cc</tt></a>
- checks all list-based "map" types.</li>
-
- <li><a href= "tree_data_map_rand.cc"><tt>tree_data_map_rand.cc</tt></a>
- checks all tree-based "map" types.</li>
-
- <li><a href= "trie_data_map_rand.cc"><tt>trie_data_map_rand.cc</tt></a>
- checks all PATRICIA-trie-based "map" types.</li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Associative-Container Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Associative-Container Tests</h1>
-
- <p><a href="assoc_regression_tests.html">Associative-Container
- Regression Tests</a> describes the regression tests; <a href=
- "assoc_performance_tests.html">Associative-Container
- Performance Tests</a> describes the performance tests.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>associative_container_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>associative_container_tag</tt> Interface</h1>
-
- <p>Basic associative-container data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="container_tag.html"><span class=
-"c2"><tt>container_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>basic_hash_table Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>basic_hash_table</tt> Interface</h1>
-
- <p>An abstract basic hash-based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Hash_Fn1515835" id=
-"Hash_Fn1515835"><b>class</b> Hash_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Eq_Fn60085" id="Eq_Fn60085"><b>class</b> Eq_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Resize_Policy566860465" id=
-"Resize_Policy566860465"><b>class</b> Resize_Policy</a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Store_Hash218262104" id=
-"Store_Hash218262104"><b>bool</b> Store_Hash</a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether the hash value will be stored along
- with each key.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped-structure tag.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="hash_fn2015995" id="hash_fn2015995">hash_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="eq_fn80245" id="eq_fn80245">eq_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Eq_Fn60085"><tt>Eq_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="resize_policy4084493169" id=
-"resize_policy4084493169">resize_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="store_hash280766104" id=
-"store_hash280766104">store_hash</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Store_Hash218262104"><tt>Store_Hash</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether a hash value is stored with each
- entry.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~basic_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#hash_fn2015995"><tt>hash_fn</tt></a> &
- get_hash_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#hash_fn2015995"><tt>hash_fn</tt></a> object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href="#hash_fn2015995"><tt>hash_fn</tt></a> &
- get_hash_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#hash_fn2015995"><tt>hash_fn</tt></a> object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#eq_fn80245"><tt>eq_fn</tt></a> &
- get_eq_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href="#eq_fn80245"><tt>eq_fn</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href="#eq_fn80245"><tt>eq_fn</tt></a> &
- get_eq_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#eq_fn80245"><tt>eq_fn</tt></a> object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#resize_policy4084493169"><tt>resize_policy</tt></a> &
- get_resize_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &
- get_resize_policy
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Private Methods</a></h2>
-
- <h3><a name="link9" id="link9">Resize Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>void</b>
- do_resize
- (size_type new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes the container object to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>basic_hash_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>basic_hash_tag</tt> Interface</h1>
-
- <p>Basic hash data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="associative_container_tag.html"><span class=
-"c2"><tt>associative_container_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>basic_invalidation_guarantee Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>basic_invalidation_guarantee</tt> Interface</h1>
-
- <p>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.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>basic_tree Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>basic_tree</tt> Interface</h1>
-
- <p>An abstract basic tree-like-based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped-structure tag.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Update841554648" id=
-"Node_Update841554648"><b>class</b> Node_Update</a>
-</pre>
- </td>
-
- <td>
- <p>Node updater.</p>
-
- <p>Restores node-invariants when invalidated.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Policy_Tl42017403" id=
-"Policy_Tl42017403"><b>class</b> Policy_Tl</a>
-</pre>
- </td>
-
- <td>
- <p>Policy typelist.</p>
-
- <p>Contains subclasses' policies.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Node_Update841554648"><tt>Node_Update</tt></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>::const_key_reference
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_update2404554648" id=
-"node_update2404554648">node_update</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Update841554648"><tt>Node_Update</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node updater type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>Const range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>::iterator
-</pre>
- </td>
-
- <td>
- <p>Range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reverse_iterator4151293083" id=
-"const_reverse_iterator4151293083">const_reverse_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const reverse range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const reverse range-type <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reverse_iterator1896910345" id=
-"reverse_iterator1896910345">reverse_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Reverse range-type iterator.<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then this is synonymous to <a href="#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Reverse range-type <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link7" id="link7">Public Methods</a></h2>
-
- <h3><a name="link8" id="link8">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~basic_tree
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_update2404554648"><tt>node_update</tt></a> &
- get_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#node_update2404554648"><tt>node_update</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#node_update2404554648"><tt>node_update</tt></a> &
- get_node_update
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#node_update2404554648"><tt>node_update</tt></a>
- object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- lower_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the entry whose key is the smallest one at least as
- large as <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- lower_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the entry whose key is the smallest one at least as
- large as <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- upper_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the entry whose key is the smallest one larger than
- <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- upper_bound
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the entry whose key is the smallest one
- larger than <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Erase Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- erase
- (<a href="#iterator10418194"><tt>iterator</tt></a> it)
-</pre>
- </td>
-
- <td>
- <p>Erases the value_type corresponding to the <a href=
- "#iterator10418194"><tt>iterator</tt></a> <span class=
- "c1"><tt>it</tt></span>. Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the next value_type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- erase
- (<a href=
-"#reverse_iterator1896910345"><tt>reverse_iterator</tt></a> it)
-</pre>
- </td>
-
- <td>
- <p>Erases the value_type corresponding to the <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- <span class="c1"><tt>it</tt></span>. Returns the <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- corresponding to the previous value_type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- rbegin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- corresponding to the last value_type in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- rbegin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- corresponding to the last value_type in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- rend
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#reverse_iterator1896910345"><tt>reverse_iterator</tt></a>
- corresponding to the just-before-first value_type in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- rend
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_reverse_iterator4151293083"><tt>const_reverse_iterator</tt></a>
- corresponding to the just-before-first value_type in the
- container.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Split and join
- Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- join
- (<span class=
-"c2"><tt>basic_tree</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Joins two trees. When this function returns,
- <span class="c1"><tt>other</tt></span> will be
- empty.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s keys must be all larger or
- all smaller than this object's keys, and <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- split
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key,
- <span class=
-"c2"><tt>basic_tree</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Splits into two trees. When this function returns,
- <span class="c1"><tt>other</tt></span> will contain
- only keys larger than <span class=
- "c1"><tt>r_key</tt></span>.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree::const_node_iterator
- Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt><span class=
- "c2"><tt>tree</tt></span>::const_node_iterator</tt>
- Interface</h1>
-
- <p>Const node iterator.</p>
-
- <p>This is an &qout;iterator to an iterator&qout; - it
- iterates over nodes, and de-referencing it returns one of the
- tree's iterators</p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">Iterator Definitions</a></h3>
-
- <table class="c2" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator_category2821876439" id=
-"iterator_category2821876439">iterator_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-trivial_iterator_tag
-</pre>
- </td>
-
- <td>
- <p>Category.</p>
-
- <p>This tag identifies that the iterator has none of the
- STL's iterators' movement abilities.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="difference_type868028452" id=
-"difference_type868028452">difference_type</a>
-</pre>
- </td>
-
- <td>
- <pre class="c1">
-void
-</pre>
- </td>
-
- <td>
- <p>Difference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link3" id="link3">Value-Type Definitions</a></h3>
-
- <p>Note that a node iterator's value type is actually a tree
- iterator.</p>
-
- <table class="c2" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"container_base.html#const_iterator98626788"><span class="c2"><tt>container_base</tt></span>::const_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"container_base.html#const_iterator98626788"><span class="c2"><tt>container_base</tt></span>::const_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"container_base.html#const_iterator98626788"><span class="c2"><tt>container_base</tt></span>::const_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's const <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Metadata Definitions</a></h3>
-
- <p>These are only defined if <a href=
- "basic_tree.html#Node_Update841554648"><span class="c2">
- <tt>basic_tree</tt></span>::Node_Update</a>
- is not <a href="null_tree_node_update.html"><span class=
- "c2"><tt>null_tree_node_update</tt></span></a></p>
-
- <table class="c2" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<tt><b>typename</b></tt> <a href=
-"basic_tree.html#Node_Update841554648"><span class="c2"><tt>basic_tree</tt></span>::Node_Update</a><tt>::metadata_type</tt>
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_metadata_reference1108857465" id=
-"const_metadata_reference1108857465">const_metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> Allocator::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::<a href="#const_reference495461441"><tt>const_reference</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const metadata <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c2" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b>
- const_node_iterator
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Access Methods</a></h3>
-
- <table class="c2" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_reference495461441"><tt>const_reference</tt></a>
- <b>operator</b>*
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Access.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Metadata Access Methods</a></h3>
-
- <p>These are only defined if <a href=
- "basic_tree.html#Node_Update841554648"><span class="c2">
- <tt>basic_tree</tt></span>::Node_Update</a>
- is not <a href="null_tree_node_update.html"><span class=
- "c2"><tt>null_tree_node_update</tt></span></a></p>
-
- <table class="c2" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_metadata_reference1108857465"><tt>const_metadata_reference</tt></a>
- get_metadata
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Metadata access.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Movement Methods</a></h3>
-
- <table class="c2" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <span class="c2"><tt>const_node_iterator</tt></span>
- get_l_child
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the const node iterator associated with the
- left node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <span class="c2"><tt>const_node_iterator</tt></span>
- get_r_child
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the const node iterator associated with the
- right node.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Comparison Methods</a></h3>
-
- <table class="c2" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- <b>operator</b>==
- (<b>const</b> <span class=
-"c2"><tt>const_node_iterator</tt></span> &other) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Compares to a different iterator object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- <b>operator</b>!=
- (<b>const</b> <span class=
-"c2"><tt>const_node_iterator</tt></span> &other) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Compares (negatively) to a different iterator
- object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>basic_tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>basic_tree_tag</tt> Interface</h1>
-
- <p>Basic tree-like data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="associative_container_tag.html"><span class=
-"c2"><tt>associative_container_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>binary_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>binary_heap_tag</tt> Interface</h1>
-
- <p>Binary-heap (array-based) data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>binomial_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>binomial_heap_tag</tt> Interface</h1>
-
- <p>Binomial-heap data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>cc_hash_max_collision_check_resize_trigger
- Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>cc_hash_max_collision_check_resize_trigger</tt>
- Interface</h1>
-
- <p>A resize trigger policy based on collision checks. It keeps
- the simulated load factor lower than some given load
- factor.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="External_Load_Access1313998607" id=
-"External_Load_Access1313998607"><b>bool</b> External_Load_Access </a>
-</pre>
- </td>
-
- <td>
- <p>Specifies whether the load factor can be accessed
- externally. The two options have different trade-offs in
- terms of flexibility, genericity, and encapsulation.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="external_load_access3976598639" id=
-"external_load_access3976598639">external_load_access</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether loads can be accessed externally</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_max_collision_check_resize_trigger
- (float load = 0.5)
-</pre>
- </td>
-
- <td>
- <p>Default constructor, or constructor taking
- <span class="c1"><tt>load</tt></span>, a load factor
- which it will attempt to maintain.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>cc_hash_max_collision_check_resize_trigger</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Load Access Methods</a></h3>
-
- <p>These methods are only available if the external access
- parameter is set.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> float
- get_load
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the current load.</p>
-
- <p>Calling this method will not compile when <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- set_load
- (float load)
-</pre>
- </td>
-
- <td>
- <p>Sets the <span class="c1"><tt>load</tt></span>; does
- not resize the container.</p>
-
- <p>It is the responsibility of the user to pass an
- appropriate <span class="c1"><tt>load</tt></span> to this
- function. Calling this method will not compile when
- <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link7" id="link7">Protected Methods</a></h2>
-
- <h3><a name="link8" id="link8">Insert Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Find Search
- Notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Erase Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Content Change
- Notifications</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Size Change
- Notifications</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized as a result of this
- object's signifying that a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_externally_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized externally.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Queries</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_grow_needed
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size, <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_entries) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a grow is needed.</p>
-
- <p>This method is called only if this object indicated is
- needed.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>cc_hash_table Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>cc_hash_table</tt> Interface</h1>
-
- <p>A concrete collision-chaining hash-based associative
- container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Hash_Fn1515835" id=
-"Hash_Fn1515835"><b>class</b> Hash_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor.</p>
- </td>
-
- <td>
- <pre>
-__gnu_cxx::hash<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>if using gcc;
- <pre>
-stdext::hash_value<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>if using Visual C++ .net
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Eq_Fn60085" id="Eq_Fn60085"><b>class</b> Eq_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor.</p>
- </td>
-
- <td>
- <pre>
-std::equal_to<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Comb_Hash_Fn320611039" id=
-"Comb_Hash_Fn320611039"><b>class</b> Comb_Hash_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Combining hash functor.</p>
-
- <p>If <a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a> is
- not <a href="null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, then this is the
- ranged-hash functor; otherwise, this is the range-hashing
- functor.</p>
-
- <p>(See <a href=
- "hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a>.)</p>
- </td>
-
- <td>
- <pre>
-<a href="direct_mask_range_hashing.html"><span class=
-"c2"><tt>direct_mask_range_hashing</tt></span></a>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Resize_Policy566860465" id=
-"Resize_Policy566860465"><b>class</b> Resize_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy.</p>
- </td>
-
- <td>
- If <tt><a href=
- "#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a></tt>
- is <tt><a href=
- "direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a></tt>,
- then
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a><
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type>,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type>,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type>
-</pre>otherwise,
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a><
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type>,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type>,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>::size_type>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Store_Hash218262104" id=
-"Store_Hash218262104"><b>bool</b> Store_Hash </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether the hash value will be stored along
- with each key.</p>
-
- <p>If <tt><a href=
- "#hash_fn2015995"><tt>hash_fn</tt></a></tt> is <a href=
- "null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, then the container
- will not compile if this value is
- <tt><b>true</b></tt></p>
- </td>
-
- <td>
- <pre>
-<tt><b>false</b></tt>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_hash_table.html"><span class=
-"c2"><tt>basic_hash_table</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="hash_fn2015995" id="hash_fn2015995">hash_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="eq_fn80245" id="eq_fn80245">eq_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Eq_Fn60085"><tt>Eq_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="resize_policy4084493169" id=
-"resize_policy4084493169">resize_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="comb_hash_fn1883611199" id=
-"comb_hash_fn1883611199">comb_hash_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Comb_Hash_Fn320611039"><tt>Comb_Hash_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Combining hash functor type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a> object of
- the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &r_comb_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &r_comb_hash_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- cc_hash_table
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &r_comb_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- cc_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &r_comb_hash_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_hash_fn</tt></span> will be copied by the
- <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- cc_hash_table
- (<b>const</b> <span class=
-"c2"><tt>cc_hash_table</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~cc_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>cc_hash_table</tt></span> &
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>cc_hash_table</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>cc_hash_table</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &
- get_comb_hash_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a> &
- get_comb_hash_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#comb_hash_fn1883611199"><tt>comb_hash_fn</tt></a>
- object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>cc_hash_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>cc_hash_tag</tt> Interface</h1>
-
- <p>Collision-chaining hash data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_hash_tag.html"><span class=
-"c2"><tt>basic_hash_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Concepts</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Concepts</h1>
-
- <h2><a name="concepts_find_and_range_iterators" id=
- "concepts_find_and_range_iterators">Point and Range Methods and
- Iterators</a></h2>
-
- <p>A point-type iterator is an iterator that refers to a
- specific element, <i>e.g.</i> as returned through an
- associative-container's <tt>find</tt> method; a range-type
- iterator is an iterator that is used to go over a sequence of
- elements, <i>e.g.</i>, as returned by a container's
- <tt>find</tt> method. A point-type method is a method that
- returns a point-type iterator; a range-type method is a method
- that returns a range-type iterator.</p>
-
- <p>For most containers, these types are synonymous; for
- self-organizing containers, such as hash-based containers or
- priority queues, these are inherently different (in any
- implementation, including that of the STL), but in
- <tt>pb_ds</tt> this is made explicit - they are distinct
- types.</p>
-
-
- <h2><a name="invalidation_guarantees" id=
- "invalidation_guarantees">Invalidation Guarantees</a></h2>
-
- <p>If one manipulates a container object, then iterators
- previously obtained from it can be invalidated. In some cases a
- previously-obtained iterator cannot be de-referenced; in other
- cases, the iterator's next or previous element might have
- changed unpredictably. This corresponds exactly to the question
- whether a point-type or range-type iterator (see previous
- concept) is valid or not. In <tt>pb_ds</tt> one can query a
- container (in compile time) what are its invalidation
- guarantees.</p>
-
- <h2><a name="prm_sec" id="prm_sec">Primary and Secondary Keys
- and Associative Containers</a></h2>
-
- <p>In <tt>pb_ds</tt> there are no associative containers which
- allow multiple values with equivalent keys (such as the STL's
- <tt>std::multimap</tt>, for example). Instead, one maps the
- unique part of a key - the primary key, into an
- associative-container of the (originally) non-unique parts of
- the key - the secondary key. A primary associative-container is
- an associative container of primary keys; a secondary
- associative-container is an associative container of secondary
- keys.</p>
-
-
- <h2><a name="concepts_null_policies" id=
- "concepts_null_policies">Null Policy Classes</a></h2>
-
- <p>Associative containers are typically parametrized by
- various policies. For example, a hash-based associative
- container is parametrized by a hash-functor, transforming each
- key into an non-negative numerical type. Each such value is
- then further mapped into a position within the table. The
- mapping of a key into a position within the table is therefore
- a two-step process.</p>
-
- <p>In some cases, instantiations are <i>redundant</i>. For
- example, when the keys are integers, it is possible to use a
- <i>redundant</i> hash policy, which transforms each key into
- its value.</p>
-
- <p>In some other cases, these policies are <i>irrelevant</i>.
- For example, a hash-based associative container might transform
- keys into positions within a table by a different method than
- the two-step method described above. In such a case, the hash
- functor is simply irrelevant.</p>
-
- <p><tt>pb_ds</tt> uses special pre-defined "null policies"
- classes for these cases. Some null policies in <tt>pb_ds</tt>
- are:</p>
-
- <ol>
- <li><a href=
- "null_mapped_type.html"><tt>null_mapped_type</tt></a></li>
-
- <li><a href=
- "null_tree_node_update.html"><tt>null_tree_node_update</tt></a></li>
-
- <li><a href=
- "null_trie_node_update.html"><tt>null_trie_node_update</tt></a></li>
-
- <li><a href=
- "null_hash_fn.html"><tt>null_hash_fn</tt></a></li>
-
- <li><a href=
- "null_probe_fn.html"><tt>null_probe_fn</tt></a></li>
- </ol>
-
- <p>A "set" in <tt>pb_ds</tt>, for example, is an associative
- container with its <tt>Data_Parameter</tt> instantiated by
- <a href="null_mapped_type.html"><tt>null_mapped_type</tt></a>.
- <a href=
- "tree_based_containers.html#invariants">Design::Tree-Based
- Containers::Node Invariants</a> explains another case where a
- null policy is needed.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Contact</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Contact</h1>
-
- <p>For anything relevant, please write to <a href=
- "mailto:pbassoc@gmail.com">pbassoc@gmail.com</a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>container_base Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>container_base</tt> Interface</h1>
-
- <p>An abstract basic associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag</a>
-</pre>
- </td>
-
- <td>
- <p>Data structure tag.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Policy_Tl42017403" id=
-"Policy_Tl42017403"><b>class</b> Policy_Tl</a>
-</pre>
- </td>
-
- <td>
- <p>Policy typelist.</p>
-
- <p>Contains subclasses' policies.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="difference_type868028452" id=
-"difference_type868028452">difference_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::difference_type
-</pre>
- </td>
-
- <td>
- <p>Difference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Categories</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="container_category1247973216" id=
-"container_category1247973216">container_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Tag278938"><tt>Tag</tt></a>
-</pre>
- </td>
-
- <td>
- <p>The underlying mapped-structure tag of the
- container.</p>
-
- <p>This is one of:</p>
-
- <ol>
- <li><a href="cc_hash_tag.html"><span class=
- "c2"><tt>cc_hash_tag</tt></span></a></li>
-
- <li><a href="gp_hash_tag.html"><span class=
- "c2"><tt>gp_hash_tag</tt></span></a></li>
-
- <li><a href="rb_tree_tag.html"><span class=
- "c2"><tt>rb_tree_tag</tt></span></a></li>
-
- <li><a href="ov_tree_tag.html"><span class=
- "c2"><tt>ov_tree_tag</tt></span></a></li>
-
- <li><a href="splay_tree_tag.html"><span class=
- "c2"><tt>splay_tree_tag</tt></span></a></li>
-
- <li><a href="pat_trie_tag.html"><span class=
- "c2"><tt>pat_trie_tag</tt></span></a></li>
-
- <li><a href="list_update_tag.html"><span class=
- "c2"><tt>list_update_tag</tt></span></a></li>
- </ol>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href="#Key2501"><tt>Key</tt></a>>::other::value_type
-</pre>
- </td>
-
- <td>
- <p><a href="#Key2501"><tt>Key</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_reference2411522399" id=
-"key_reference2411522399">key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p><a href="#Key2501"><tt>Key</tt></a> reference
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>>::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_pointer1299054769" id=
-"key_pointer1299054769">key_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>>::other::pointer
-</pre>
- </td>
-
- <td>
- <p><a href="#Key2501"><tt>Key</tt></a> pointer type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_pointer3735194427" id=
-"const_key_pointer3735194427">const_key_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>>::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const key pointer type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Mapped-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="mapped_type1308374436" id=
-"mapped_type1308374436">mapped_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Mapped318655"><tt>Mapped</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Mapped318655"><tt>Mapped</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="mapped_reference4153801225" id=
-"mapped_reference4153801225">mapped_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p><a href="#Mapped318655"><tt>Mapped</tt></a> reference
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_mapped_reference2113216667" id=
-"const_mapped_reference2113216667">const_mapped_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>>::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const mapped reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="mapped_pointer337953771" id=
-"mapped_pointer337953771">mapped_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>>::other::pointer
-</pre>
- </td>
-
- <td>
- <p><a href="#Mapped318655"><tt>Mapped</tt></a> pointer
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_mapped_pointer4207700301" id=
-"const_mapped_pointer4207700301">const_mapped_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#mapped_type1308374436"><tt>mapped_type</tt></a>>::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const mapped pointer type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then <a href=
-"#Key2501"><tt>Key</tt></a><br />
-Otherwise, <a href="#Mapped318655"><tt>Mapped</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p>Value reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const value <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="pointer2179769" id="pointer2179769">pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::pointer
-</pre>
- </td>
-
- <td>
- <p>Value pointer type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const Value <a href=
- "#pointer2179769"><tt>pointer</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_point_iterator2364676009" id=
-"const_point_iterator2364676009">const_point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const point-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="point_iterator2789896775" id=
-"point_iterator2789896775">point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<br />
-Point-type iterator.<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then this is synonymous to <a href="#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<br />
-Range-type iterator.<br />
-If <a href="#Mapped318655"><tt>Mapped</tt></a> is <a href=
-"null_mapped_type.html"><span class=
-"c2"><tt>null_mapped_type</tt></span></a>, then this is synonymous to <a href="#const_iterator98626788"><tt>const_iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Range-type iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Public Methods</a></h2>
-
- <h3><a name="link11" id="link11">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~container_base
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Information Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the number of distinct <a href=
- "#value_type279018186"><tt>value_type</tt></a> objects
- the container object is storing.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- max_size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns an upper bound on the number of distinct
- <a href="#value_type279018186"><tt>value_type</tt></a>
- objects this container can store.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- empty
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns whether the container object is not storing
- any <a href=
- "#value_type279018186"><tt>value_type</tt></a>
- objects.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Insert Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair<<a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a>, <b>bool</b>>
- insert
- (<a href=
-"#const_reference495461441"><tt>const_reference</tt></a> r_val)
-</pre>
- </td>
-
- <td>
- <p>Inserts a <a href=
- "#value_type279018186"><tt>value_type</tt></a> object. If
- no <a href="#value_type279018186"><tt>value_type</tt></a>
- with <span class="c1"><tt>r_val</tt></span>'s key was in
- the container object, inserts and returns (<a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- object associated with <span class=
- "c1"><tt>r_val</tt></span>, <tt><b>true</b></tt>);
- otherwise just returns (<a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- object associated with <span class=
- "c1"><tt>r_val</tt></span>'s key,
- <tt><b>false</b></tt>).</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#mapped_reference4153801225"><tt>mapped_reference</tt></a>
- <b>operator</b>[]
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Subscript operator.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#point_iterator2789896775"><tt>point_iterator</tt></a>
- find
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- corresponding to the <a href=
- "#value_type279018186"><tt>value_type</tt></a> with
- <span class="c1"><tt>r_key</tt></span> as its key, or the
- <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- corresponding to the just-after-last entry if no such
- <a href=
- "#value_type279018186"><tt>value_type</tt></a>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
- find
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
- corresponding to the <a href=
- "#value_type279018186"><tt>value_type</tt></a> with
- <span class="c1"><tt>r_key</tt></span> as its key, or the
- <a href=
- "#const_point_iterator2364676009"><tt>const_point_iterator</tt></a>
- corresponding to the just-after-last entry if no such
- <a href=
- "#value_type279018186"><tt>value_type</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link15" id="link15">Erase Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>bool</b>
- erase
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Erases the <a href=
- "#value_type279018186"><tt>value_type</tt></a> associated
- with <span class="c1"><tt>r_key</tt></span>. returns
- <tt><b>false</b></tt> iff <span class=
- "c1"><tt>r_key</tt></span> was not contained.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> Pred>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- erase_if
- (Pred prd)
-</pre>
- </td>
-
- <td>
- <p>Erases any <a href=
- "#value_type279018186"><tt>value_type</tt></a> satisfying
- the predicate <span class="c1"><tt>prd</tt></span> (this
- is transactional, either all matching <a href=
- "#value_type279018186"><tt>value_type</tt></a>s are
- erased, or, if an exception is thrown (for types whose
- erase can throw an exception) none); returns the number
- of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s
- erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- clear
- ()
-</pre>
- </td>
-
- <td>
- <p>Clears the container object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link16" id="link16">Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#iterator10418194"><tt>iterator</tt></a>
- end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="11in"
- height="8.5in"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.43"
- version="1.0"
- sodipodi:docbase="/mnt/share/src/policy_based_data_structures/current/pb_ds/doc"
- sodipodi:docname="container_cd.svg"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/current/pb_ds/doc/container_cd.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path3311"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
- transform="scale(0.4)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Sstart"
- style="overflow:visible">
- <path
- id="path3319"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(0.3,0,0,0.3,-1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Sstart"
- style="overflow:visible">
- <path
- id="path3337"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(0.2,0.2)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Send"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Send"
- style="overflow:visible">
- <path
- id="path3316"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.3,0,0,-0.3,1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mend"
- style="overflow:visible">
- <path
- id="path3322"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.6,0,0,-0.6,3,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3346"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(-0.8,-0.8)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lstart"
- style="overflow:visible">
- <path
- id="path3331"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(1.1,0,0,1.1,-5.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lend"
- style="overflow:visible">
- <path
- id="path3328"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2"
- inkscape:cx="396.81316"
- inkscape:cy="280"
- inkscape:document-units="in"
- inkscape:current-layer="layer1"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1278"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
- gridtolerance="0.125in"
- guidetolerance="0.125in">
- <sodipodi:guide
- orientation="horizontal"
- position="629"
- id="guide1307" />
- <sodipodi:guide
- orientation="horizontal"
- position="449"
- id="guide1309" />
- <sodipodi:guide
- orientation="horizontal"
- position="269"
- id="guide1311" />
- <sodipodi:guide
- orientation="vertical"
- position="496"
- id="guide1313" />
- <sodipodi:guide
- orientation="vertical"
- position="361"
- id="guide1315" />
- <sodipodi:guide
- orientation="vertical"
- position="226"
- id="guide1317" />
- <sodipodi:guide
- orientation="vertical"
- position="631"
- id="guide1319" />
- <sodipodi:guide
- orientation="vertical"
- position="766"
- id="guide1321" />
- <sodipodi:guide
- orientation="vertical"
- position="91"
- id="guide1345" />
- <sodipodi:guide
- orientation="vertical"
- position="901"
- id="guide1347" />
- <sodipodi:guide
- orientation="horizontal"
- position="539"
- id="guide3390" />
- <sodipodi:guide
- orientation="horizontal"
- position="359"
- id="guide3392" />
- <sodipodi:guide
- orientation="vertical"
- position="280.5"
- id="guide3324" />
- <sodipodi:guide
- orientation="vertical"
- position="172"
- id="guide3326" />
- <sodipodi:guide
- orientation="vertical"
- position="388"
- id="guide3328" />
- <sodipodi:guide
- orientation="vertical"
- position="711.5"
- id="guide3340" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Benjamin Kosnik</dc:title>
- </cc:Agent>
- </dc:creator>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect1425"
- width="141.64481"
- height="23.200001"
- x="209.57762"
- y="382.56177" />
- <rect
- y="382.56177"
- x="425.57761"
- height="23.200001"
- width="141.64481"
- id="rect3376"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3378"
- width="141.64481"
- height="23.200001"
- x="640.77765"
- y="382.56177" />
- <text
- sodipodi:linespacing="100%"
- id="use1329"
- y="397.09772"
- x="497.20001"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1703"
- x="497.20001"
- y="397.09772">list_update</tspan><tspan
- sodipodi:role="line"
- id="tspan1705"
- x="497.20001"
- y="406.69772" /></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="712.40002"
- y="397.09772"
- id="use1337"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1707"
- x="712.40002"
- y="397.09772">basic_hash_table</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="282"
- y="397.09772"
- id="text1339"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1701"
- x="282"
- y="397.09772">basic_tree</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3418"
- width="141.64481"
- height="23.200001"
- x="101.57762"
- y="472.5618" />
- <rect
- y="472.5618"
- x="317.57761"
- height="23.200001"
- width="141.64481"
- id="rect3420"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3422"
- width="141.64481"
- height="23.200001"
- x="533.57764"
- y="472.5618" />
- <rect
- y="472.5618"
- x="748.77765"
- height="23.200001"
- width="141.64481"
- id="rect3424"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="171.20001"
- y="486.29773"
- id="text3394"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1715"
- x="171.20001"
- y="486.29773">tree</tspan><tspan
- sodipodi:role="line"
- id="tspan1717"
- x="171.20001"
- y="495.89773" /></text>
- <text
- sodipodi:linespacing="100%"
- id="text3400"
- y="486.29773"
- x="386.39999"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1709"
- x="386.39999"
- y="486.29773">trie</tspan><tspan
- sodipodi:role="line"
- id="tspan1711"
- x="386.39999"
- y="495.89773" /></text>
- <text
- sodipodi:linespacing="100%"
- id="text3406"
- y="486.29773"
- x="601.20001"
- style="font-size:9.60000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1713"
- x="601.20001"
- y="486.29773">cc_hash_table</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="818"
- y="486.29773"
- id="text3412"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1719"
- x="818"
- y="486.29773">gp_hash_table</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3380"
- width="141.64481"
- height="23.200001"
- x="425.57764"
- y="292.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.5625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="497.20001"
- y="307.09772"
- id="text1323"
- sodipodi:linespacing="100%"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/pb_ds_images/container_diagram.png"><tspan
- sodipodi:role="line"
- id="tspan1369"
- x="497.20001"
- y="307.09772">container_base</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.97031623px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 170.97058,472.5 L 170.97058,451 L 387.51871,450 L 387.51871,472.5"
- id="path2244" />
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 280.5,450.53297 L 280.5,410.62445"
- id="path3332" />
- <path
- id="path3353"
- d="M 601.47058,472.5 L 601.47058,451 L 818.01871,450 L 818.01871,472.5"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.97031623px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3355"
- d="M 711,450.53297 L 711,410.62445"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3344"
- d="M 281.18218,383.28102 L 281.18218,361.78102 L 711.79281,360.78102 L 711.79281,383.28102"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.3682909px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3347"
- d="M 497.75146,383.49616 L 497.75146,322.77107"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- </g>
-</svg>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>container _tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>container _tag</tt> Interface</h1>
-
- <p>Basic data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>counter_lu_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>counter_lu_policy</tt> Interface</h1>
-
- <p>A list-update policy that moves elements to the front of the
- list based on the counter algorithm.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/list_update_policy.hpp"><tt>list_update_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Max_Count39887466" id=
-"Max_Count39887466">size_t Max_Count </a>
-</pre>
- </td>
-
- <td>
- <p>Maximum count.</p>
-
- <p>When some element is accessed this number of times, it
- will be moved to the front of the list.</p>
- </td>
-
- <td>5</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
-
- <p>This is used only for definitions, e.g., the size
- type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="max_count52407466" id="max_count52407466">max_count</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Max_Count39887466"><tt>Max_Count</tt></a>
-}
-</pre>
- </td>
-
- <td>
- <p>Maximum count.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Some class containing a counter.
-</pre>
- </td>
-
- <td>
- <p>Metadata on which this functor operates.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_reference583863863" id=
-"metadata_reference583863863">metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p>Reference to metadata on which this functor
- operates.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Metadata Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#metadata_type2849297114"><tt>metadata_type</tt></a>
- <b>operator</b>()
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Creates a metadata object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>bool</b>
- <b>operator</b>()
- (<a href=
-"#metadata_reference583863863"><tt>metadata_reference</tt></a> r_metadata) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Decides whether a metadata object should be moved to
- the front of the list.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Design</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Design</h1>
-
- <p>The <tt>pb_ds</tt> namespace contains:</p>
-
- <ol>
- <li>Exception classes (see <a href=
- "interface.html#exceptions_common">Interface::Exceptions::Common</a>)</li>
-
- <li>Invalidation-guarantee tags (see <a href=
- "ds_gen.html#inv_guar">Design::Invalidation Guarantees</a>
- and <a href=
- "interface.html#ds_inv_tag">Interface::Data-Structure Tags
- and Traits::Invalidation-Guarantee Tags</a>).</li>
-
- <li>Associative Containers (see <a href=
- "tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>, <a href=
- "trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>, <a href=
- "hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>, and <a href=
- "lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>, and <a href=
- "interface.html#containers_assoc">Interface::Containers::Associative
- Containers</a>).</li>
-
- <li>Associative Container tags and traits
- (see <a href="ds_gen.html">Design::Associative
- Containers::Data-Structure Genericity</a>, <a href=
- "interface.html#ds_ts_assoc">Interface::Data-Structure Tags
- and Traits::Data-Structure Tags::Associative-Containers</a>,
- and <a href=
- "interface.html#container_traits">Interface::Data-Structure Tags and
- Traits::Data-Structure
- Traits::Associative-Containers</a>).</li>
-
- <li>Associative Container policies (see
- <a href="tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>, <a href=
- "trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>, <a href=
- "hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>, and <a href=
- "lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>, and <a href=
- "interface.html#ds_policy_classes">Interface::Container
- Policy Classes</a>).</li>
-
-
- <li>Mapped types for setting the mapping semantics of
- associative containers (see <a href=
- "tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a> and
- <a href="interface.html#ds_pol">Interface::Mapped-Type
- Policies</a>).</li>
-
-
- <li>Priority Queues (see <a href="pq_design.html">Design::Priority
- Queues</a> and <a href=
- "interface.html#containers_pq">Interface::Containers::Priority
- Queues</a>).</li>
-
- <li>Priority Queue tags and traits
- (see <a href="pq_design.html#pq_traits">Design::Priority
- Queues::Traits</a>, <a href=
- "interface.html#ds_ts_pq">Interface::Data-Structure Tags and
- Traits::Data-Structure Tags::Priority Queues</a>, and
- <a href="interface.html#container_traits">Interface::Data-Structure
- Tags and Traits::Data-Structure Traits::Priority
- Queues</a>).</li>
- </ol>
-
-
- <p><a href="assoc_design.html">Associative-Container Design</a>
- describes associative-container design.</p>
-
- <p><a href="pq_design.html">Priority-Queue Design</a> describes
- priority-queue design.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>direct_mask_range_hashing Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>direct_mask_range_hashing</tt> Interface</h1>
-
- <p>A mask range-hashing class (uses a bit-mask).</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>direct_mask_range_hashing</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Protected Methods</a></h2>
-
- <h3><a name="link7" id="link7">Notification Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the policy object that the container's size
- has changed to <span class="c1"><tt>size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> hash) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms the hash value <span class=
- "c1"><tt>hash</tt></span> into a ranged-hash value (using
- a bit-mask).</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>direct_mod_range_hashing Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>direct_mod_range_hashing</tt> Interface</h1>
-
- <p>A mod range-hashing class (uses the modulo function).</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>direct_mod_range_hashing</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Protected Methods</a></h2>
-
- <h3><a name="link7" id="link7">Notification Methods</a></h3>
-
- <h3><a name="link8" id="link8">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> hash) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms the hash value <span class=
- "c1"><tt>hash</tt></span> into a ranged-hash value (using
- a modulo operation).</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>What, me worry?</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h2>Disclaimer and Copyright</h2>
-
- <p>Revised 16 February, 2004</p>© Copyright Ami Tavory and
- Vladimir Dreizin, IBM-HRL, 2004, and Benjamin Kosnik, Red Hat,
- 2004.
-
- <p>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.</p>
-
- <p>None of the above authors, nor IBM Haifa Research
- Laboratories, Red Hat, or both, make any representation about
- the suitability of this software for any purpose. It is
- provided "as is" without express or implied warranty.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Data-Structure Genericity</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Data-Structure Genericity</h1>
-
- <h2><a name="problem" id="problem">The Basic Problem</a></h2>
-
- <p>The design attempts to address the following problem. When
- writing a function manipulating a generic container object,
- what is the behavior of the object? <i>E.g.</i>, suppose one
- writes</p>
- <pre>
-<b>template</b><<b>typename</b> Cntnr>
-<b>void</b>
-some_op_sequence(Cntnr &r_container)
-{
- ...
-}
-</pre>then one needs to address the following questions in the body
-of <tt>some_op_sequence</tt>:
-
- <ol>
- <li>Which types and methods does <tt>Cntnr</tt> support?
- Containers based on hash tables can be queries for the
- hash-functor type and object; this is meaningless for
- tree-based containers. Containers based on trees can be
- split, joined, or can erase iterators and return the
- following iterator; this cannot be done by hash-based
- containers.</li>
-
- <li>What are the guarantees of <tt>Cntnr</tt>? A container
- based on a probing hash-table invalidates all iterators when
- it is modified; this is not the case for containers based on
- node-based trees. Containers based on a node-based tree can
- be split or joined without exceptions; this is not the case
- for containers based on vector-based trees.</li>
-
- <li>How does the container maintain its elements? Tree-based
- and Trie-based containers store elements by key order;
- others, typically, do not. A container based on a splay trees
- or lists with update policies "cache" "frequently accessed"
- elements; containers based on most other underlying
- data structures do not.</li>
- </ol>
-
- <p>The remainder of this section deals with these issues.</p>
-
- <h2><a name="ds_hierarchy" id="ds_hierarchy">Container
- Hierarchy</a></h2>
-
- <p>Figure <a href="#cd">Container class hierarchy</a> shows the
- container hierarchy.</p>
-
- <h6 class="c1"><a name="cd" id="cd"><img src="container_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Container class hierarchy.</h6>
-
- <ol>
- <li><a href=
- "container_base.html"><tt>container_base</tt></a> is an
- abstract base class for associative containers.</li>
-
- <li>Tree-Like-Based Associative-Containers:
-
- <ol>
- <li><a href=
- "basic_tree.html"><tt>basic_tree</tt></a>
- is an abstract base class for tree-like-based
- associative-containers</li>
-
- <li><a href=
- "tree.html"><tt>tree</tt></a>
- is a concrete base class for tree-based
- associative-containers</li>
-
- <li><a href=
- "trie.html"><tt>trie</tt></a>
- is a concrete base class trie-based
- associative-containers</li>
- </ol>
- </li>
-
- <li>Hash-Based Associative-Containers:
-
- <ol>
- <li><a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- is an abstract base class for hash-based
- associative-containers</li>
-
- <li><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>
- is a concrete collision-chaining hash-based
- associative-containers</li>
-
- <li><a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a>
- is a concrete (general) probing hash-based
- associative-containers</li>
- </ol>
- </li>
-
- <li>List-Based Associative-Containers:
-
- <ol>
- <li><a href=
- "list_update.html"><tt>list_update</tt></a> -
- list-based update-policy associative container</li>
- </ol>
- </li>
- </ol>
-
- <p>The hierarchy is composed naturally so that commonality is
- captured by base classes. Thus <tt><b>operator[]</b></tt> is
- defined <a href=
- "container_base.html"><tt>container_base</tt></a>, since
- all containers support it. Conversely <tt>split</tt> is defined
- in <a href=
- "basic_tree.html"><tt>basic_tree</tt></a>,
- since only tree-like containers support it. <a href=
- "#container_traits">Data-Structure Tags and Traits</a> discusses how
- to query which types and methods each container supports.</p>
-
- <h2><a name="container_traits" id="container_traits">Data-Structure Tags and
- Traits</a></h2>
-
- <p>Tags and traits are very useful for manipulating generic
- types. For example, if <tt>It</tt> is an iterator class, then
- <tt><b>typename</b> It::iterator_category</tt> or
- <tt><b>typename</b>
- std::iterator_traits<It>::iterator_category</tt> will
- yield its category, and <tt><b>typename</b>
- std::iterator_traits<It>::value_type</tt> will yield its
- value type.</p>
-
- <p><tt>pb_ds</tt> contains a tag hierarchy corresponding to the
- hierarchy in Figure <a href="#cd">Class hierarchy</a>. The tag
- hierarchy is shown in Figure <a href=
- "#tag_cd">Data-structure tag class hierarchy</a>.</p>
-
- <h6 class="c1"><a name="tag_cd" id="tag_cd"><img src=
- "assoc_container_tag_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Data-structure tag class hierarchy.</h6>
-
- <p><a href=
- "container_base.html"><tt>container_base</tt></a>
- publicly defines <tt>container_category</tt> as one of the classes in
- Figure <a href="#tag_cd">Data-structure tag class
- hierarchy</a>. Given any container <tt>Cntnr</tt>, the tag of
- the underlying data structure can be found via
- <tt><b>typename</b> Cntnr::container_category</tt>.</p>
-
- <p>Additionally, a traits mechanism can be used to query a
- container type for its attributes. Given any container
- <tt>Cntnr</tt>, then <tt><a href=
- "assoc_container_traits.html">__gnu_pbds::container_traits</a><Cntnr></tt>
- is a traits class identifying the properties of the
- container.</p>
-
- <p>To find if a container can throw when a key is erased (which
- is true for vector-based trees, for example), one can
- use</p><a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt><Cntnr>::erase_can_throw</tt>,
- for example.
-
- <p>Some of the definitions in <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a> are
- dependent on other definitions. <i>E.g.</i>, if <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt><Cntnr>::order_preserving</tt>
- is <tt><b>true</b></tt> (which is the case for containers based
- on trees and tries), then the container can be split or joined;
- in this case, <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt><Cntnr>::split_join_can_throw</tt>
- indicates whether splits or joins can throw exceptions (which
- is true for vector-based trees); otherwise <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt><Cntnr>::split_join_can_throw</tt>
- will yield a compilation error. (This is somewhat similar to a
- compile-time version of the COM model [<a href=
- "references.html#mscom">mscom</a>]).</p>
-
- <h2><a name="find_range" id="find_range">Point-Type and
- Range-Type Methods and Iterators</a></h2>
-
- <h3><a name="it_unordered" id="it_unordered">Iterators in
- Unordered Container Types</a></h3>
-
- <p><tt>pb_ds</tt> differentiates between two types of methods
- and iterators: point-type methods and iterators, and range-type
- methods and iterators (see <a href=
- "motivation.html#assoc_diff_it">Motivation::Associative
- Containers::Differentiating between Iterator Types</a> and
- <a href="tutorial.html#assoc_find_range">Tutorial::Associative
- Containers::Point-Type and Range-Type Methods and
- Iterators</a>). Each associative container's interface includes
- the methods:</p>
- <pre>
-const_point_iterator
-find(const_key_reference r_key) const;
-
-point_iterator
-find(const_key_reference r_key);
-
-std::pair<point_iterator,<b>bool</b>>
-insert(const_reference r_val);
-</pre>
-
- <p>The relationship between these iterator types varies between
- container types. Figure <a href=
- "#point_iterators_cd">Point-type and range-type iterators</a>-A
- shows the most general invariant between point-type and
- range-type iterators: <tt>iterator</tt>, <i>e.g.</i>, can
- always be converted to <tt>point_iterator</tt>. Figure <a href=
- "#point_iterators_cd">Point-type and range-type iterators</a>-B
- shows invariants for order-preserving containers: point-type
- iterators are synonymous with range-type iterators.
- Orthogonally, Figure <a href="#point_iterators_cd">Point-type
- and range-type iterators</a>-C shows invariants for "set"
- containers: iterators are synonymous with const iterators.</p>
-
- <h6 class="c1"><a name="point_iterators_cd" id=
- "point_iterators_cd"><img src="point_iterators_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Point-type and range-type iterators.</h6>
-
- <p>Note that point-type iterators in self-organizing containers
- (<i>e.g.</i>, hash-based associative containers) lack movement
- operators, such as <tt><b>operator++</b></tt> - in fact, this
- is the reason why <tt>pb_ds</tt> differentiates from the STL's
- design on this point.</p>
-
- <p>Typically, one can determine an iterator's movement
- capabilities in the STL using
- <tt>std::iterator_traits<It>iterator_category</tt>, which
- is a <tt><b>struct</b></tt> indicating the iterator's movement
- capabilities. Unfortunately, none of the STL's predefined
- categories reflect a pointer's <u>not</u> having any movement
- capabilities whatsoever. Consequently, <tt>pb_ds</tt> adds a
- type <a href=
- "trivial_iterator_tag.html"><tt>trivial_iterator_tag</tt></a>
- (whose name is taken from a concept in [<a href=
- "references.html#sgi_stl">sgi_stl</a>]), which is the category
- of iterators with no movement capabilities. All other STL tags,
- such as <tt>forward_iterator_tag</tt> retain their common
- use.</p>
-
- <h3><a name="inv_guar" id="inv_guar">Invalidation
- Guarantees</a></h3>
-
- <p><a href=
- "motivation.html#assoc_inv_guar">Motivation::Associative
- Containers::Differentiating between Iterator
- Types::Invalidation Guarantees</a> posed a problem. Given three
- different types of associative containers, a modifying
- operation (in that example, <tt>erase</tt>) invalidated
- iterators in three different ways: the iterator of one
- container remained completely valid - it could be de-referenced
- and incremented; the iterator of a different container could
- not even be de-referenced; the iterator of the third container
- could be de-referenced, but its "next" iterator changed
- unpredictably.</p>
-
- <p>Distinguishing between find and range types allows
- fine-grained invalidation guarantees, because these questions
- correspond exactly to the question of whether point-type
- iterators and range-type iterators are valid. <a href=
- "#invalidation_guarantee_cd">Invalidation guarantees class
- hierarchy</a> shows tags corresponding to different types of
- invalidation guarantees.</p>
-
- <h6 class="c1"><a name="invalidation_guarantee_cd" id=
- "invalidation_guarantee_cd"><img src=
- "invalidation_guarantee_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Invalidation guarantees class hierarchy.</h6>
-
- <ol>
- <li><a href=
- "basic_invalidation_guarantee.html"><tt>basic_invalidation_guarantee</tt></a>
- corresponds to a basic guarantee that a point-type iterator,
- a found pointer, or a found reference, remains valid as long
- as the container object is not modified.</li>
-
- <li><a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>
- corresponds to a guarantee that a point-type iterator, a
- found pointer, or a found reference, remains valid even if
- the container object is modified.</li>
-
- <li><a href=
- "range_invalidation_guarantee.html"><tt>range_invalidation_guarantee</tt></a>
- corresponds to a guarantee that a range-type iterator remains
- valid even if the container object is modified.</li>
- </ol>
-
- <p>As shown in <a href=
- "tutorial.html#assoc_find_range">Tutorial::Associative
- Containers::Point-Type and Range-Type Methods and
- Iterators</a>, to find the invalidation guarantee of a
- container, one can use</p>
- <pre>
-<b>typename</b> <a href=
-"assoc_container_traits.html">container_traits</a><Cntnr>::invalidation_guarantee
-</pre>
-
- <p>which is one of the classes in Figure <a href=
- "#invalidation_guarantee_cd">Invalidation guarantees class
- hierarchy</a>.</p>
-
- <p>Note that this hierarchy corresponds to the logic it
- represents: if a container has range-invalidation guarantees,
- then it must also have find invalidation guarantees;
- correspondingly, its invalidation guarantee (in this case
- <a href=
- "range_invalidation_guarantee.html"><tt>range_invalidation_guarantee</tt></a>)
- can be cast to its base class (in this case <a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>).
- This means that this this hierarchy can be used easily using
- standard metaprogramming techniques, by specializing on the
- type of <tt>invalidation_guarantee</tt>.</p>
-
- <p>(These types of problems were addressed, in a more general
- setting, in [<a href=
- "references.html#meyers96more">meyers96more</a>] - Item 2. In
- our opinion, an invalidation-guarantee hierarchy would solve
- these problems in all container types - not just associative
- containers.)</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Examples</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Examples</h1>
-
- <p><a href="assoc_examples.html">Associative-Container
- Examples</a> shows examples for associative containers;
- <a href="pq_examples.html">Priority-Queue Examples</a> shows
- examples for priority queues.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
-<title>container_error Interface</title>
-<meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-</head>
-
-<body>
-<div id="page">
-<h1><tt>container_error</tt> Interface</h1>
-
-<p>Base class for associative-container exceptions.</p>
-
-<p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/exception.hpp"><tt>exception.hpp</tt></a></p>
-
-<h2><a name="link1" id="link1">Base Classes</a></h2>
-
-<table class="c1" width="100%" border="1" summary="Bases">
-<tr>
-<td width="80%" align="left"><b>Class</b></td>
-
-<td width="20%" align="left"><b>Derivation Type</b></td>
-</tr>
-
-<tr>
-<td>
-<pre>
-std::logic_error
-</pre>
-</td>
-
-<td>
-<p>public</p>
-</td>
-</tr>
-</table>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>gp_hash_table Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>gp_hash_table</tt> Interface</h1>
-
- <p>A concrete general-probing hash-based associative
- container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Hash_Fn1515835" id=
-"Hash_Fn1515835"><b>class</b> Hash_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor.</p>
- </td>
-
- <td>
- <pre>
-__gnu_cxx::hash<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>if using gcc;
- <pre>
-stdext::hash_value<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>if using Visual C++ .net
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Eq_Fn60085" id="Eq_Fn60085"><b>class</b> Eq_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor.</p>
- </td>
-
- <td>
- <pre>
-std::equal_to<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Comb_Probe_Fn1603930855" id=
-"Comb_Probe_Fn1603930855"><b>class</b> Comb_Probe_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Combining probe functor.</p>
-
- <p>If <a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a> is
- <a href="null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, and <a href=
- "#Probe_Fn8454835"><tt>Probe_Fn</tt></a> is <a href=
- "null_probe_fn.html"><span class=
- "c2"><tt>null_probe_fn</tt></span></a>, then this is the
- ranged-probe functor; otherwise, this is the
- range-hashing functor.</p>
-
- <p>(See <a href=
- "hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a>.)</p>
- </td>
-
- <td><a href="direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Probe_Fn8454835" id=
-"Probe_Fn8454835"><b>class</b> Probe_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Probe functor.</p>
- </td>
-
- <td>
- If <tt><a href=
- "#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a></tt>
- is <a href="direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a>, then
- <pre>
-<a href="linear_probe_fn.html"><span class=
-"c2"><tt>linear_probe_fn</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>
-</pre>otherwise,
- <pre>
-<a href="quadratic_probe_fn.html"><span class=
-"c2"><tt>quadratic_probe_fn</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Resize_Policy566860465" id=
-"Resize_Policy566860465"><b>class</b> Resize_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy.</p>
- </td>
-
- <td>
- If <tt><a href=
- "#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a></tt>
- is <tt><a href=
- "direct_mask_range_hashing.html"><span class=
- "c2"><tt>direct_mask_range_hashing</tt></span></a></tt>,
- then
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a><
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>
-</pre>otherwise,
- <pre>
-<a href="hash_standard_resize_policy.html"><span class=
-"c2"><tt>hash_standard_resize_policy</tt></span></a><
- <a href="hash_exponential_size_policy.html"><span class=
-"c2"><tt>hash_exponential_size_policy</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>,
- <a href="hash_load_check_resize_trigger.html"><span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span></a><
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>,
- <b>false</b>,
- <b>typename</b> <a href=
-"#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>::size_type>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Store_Hash218262104" id=
-"Store_Hash218262104"><b>bool</b> Store_Hash </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether the hash value will be stored along
- with each key.</p>
-
- <p>If <tt><a href=
- "#hash_fn2015995"><tt>hash_fn</tt></a></tt> is <a href=
- "null_hash_fn.html"><span class=
- "c2"><tt>null_hash_fn</tt></span></a>, then the container
- will not compile if this value is
- <tt><b>true</b></tt></p>
- </td>
-
- <td>
- <pre>
-<tt><b>false</b></tt>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_hash_table.html"><span class=
-"c2"><tt>basic_hash_table</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="hash_fn2015995" id="hash_fn2015995">hash_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Hash_Fn1515835"><tt>Hash_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Hash functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="eq_fn80245" id="eq_fn80245">eq_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Eq_Fn60085"><tt>Eq_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="comb_probe_fn828996423" id=
-"comb_probe_fn828996423">comb_probe_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Comb_Probe_Fn1603930855"><tt>Comb_Probe_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Combining probe functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="probe_fn10954995" id="probe_fn10954995">probe_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Probe_Fn8454835"><tt>Probe_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Probe functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="resize_policy4084493169" id=
-"resize_policy4084493169">resize_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Resize policy type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &r_comb_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &r_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &r_probe_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#Resize_Policy566860465"><tt>Resize_Policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- gp_hash_table
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, and <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &r_comb_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, and <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &r_probe_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, and <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- gp_hash_table
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#hash_fn2015995"><tt>hash_fn</tt></a> &r_hash_fn,
- <b>const</b> <a href=
-"#eq_fn80245"><tt>eq_fn</tt></a> &r_eq_fn,
- <b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &r_comb_probe_fn,
- <b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &r_probe_fn,
- <b>const</b> <a href=
-"#resize_policy4084493169"><tt>resize_policy</tt></a> &r_resize_policy)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_hash_fn</tt></span> will be copied by the
- <a href="#hash_fn2015995"><tt>hash_fn</tt></a> object of
- the container object, <span class=
- "c1"><tt>r_eq_fn</tt></span> will be copied by the
- <a href="#eq_fn80245"><tt>eq_fn</tt></a> object of the
- container object, <span class=
- "c1"><tt>r_comb_probe_fn</tt></span> will be copied by
- the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object of the container object, <span class=
- "c1"><tt>r_probe_fn</tt></span> will be copied by the
- <a href="#probe_fn10954995"><tt>probe_fn</tt></a> object
- of the container object, and <span class=
- "c1"><tt>r_resize_policy</tt></span> will be copied by
- the <a href=
- "#resize_policy4084493169"><tt>resize_policy</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- gp_hash_table
- (<b>const</b> <span class=
-"c2"><tt>gp_hash_table</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~gp_hash_table
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>gp_hash_table</tt></span> &
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>gp_hash_table</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>gp_hash_table</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &
- get_comb_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a> &
- get_comb_probe_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#comb_probe_fn828996423"><tt>comb_probe_fn</tt></a>
- object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#probe_fn10954995"><tt>probe_fn</tt></a> &
- get_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#probe_fn10954995"><tt>probe_fn</tt></a> object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#probe_fn10954995"><tt>probe_fn</tt></a> &
- get_probe_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#probe_fn10954995"><tt>probe_fn</tt></a> object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>gp_hash_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>gp_hash_tag</tt> Interface</h1>
-
- <p>General-probing hash data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_hash_tag.html"><span class=
-"c2"><tt>basic_hash_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Hash-Based Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Hash Table Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The collision-chaining hash-based container has the
- following declaration.</p>
- <pre>
-<b>template</b><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash_Fn = std::hash<Key>,
- <b>typename</b> Eq_Fn = std::equal_to<Key>,
- <b>typename</b> Comb_Hash_Fn = <a href=
-"direct_mask_range_hashing.html">direct_mask_range_hashing</a><>
- <b>typename</b> Resize_Policy = <i>default explained below.</i>
- <b>bool</b> Store_Hash = <b>false</b>,
- <b>typename</b> Allocator = std::allocator<<b>char</b>> >
-<b>class</b> <a href=
-"cc_hash_table.html">cc_hash_table</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Key</tt> is the key type.</li>
-
- <li><tt>Mapped</tt> is the mapped-policy, and is explained in
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>.</li>
-
- <li><tt>Hash_Fn</tt> is a key hashing functor.</li>
-
- <li><tt>Eq_Fn</tt> is a key equivalence functor.</li>
-
- <li><tt>Comb_Hash_Fn</tt> is a <i>range-hashing_functor</i>;
- it describes how to translate hash values into positions
- within the table. This is described in <a href=
- "#hash_policies">Hash Policies</a>.</li>
-
- <li><tt>Resize_Policy</tt> describes how a container object
- should change its internal size. This is described in
- <a href="#resize_policies">Resize Policies</a>.</li>
-
- <li><tt>Store_Hash</tt> indicates whether the hash value
- should be stored with each entry. This is described in
- <a href="#policy_interaction">Policy Interaction</a>.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The probing hash-based container has the following
- declaration.</p>
- <pre>
-<b>template</b><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash_Fn = std::hash<Key>,
- <b>typename</b> Eq_Fn = std::equal_to<Key>,
- <b>typename</b> Comb_Probe_Fn = <a href=
-"direct_mask_range_hashing.html">direct_mask_range_hashing</a><>
- <b>typename</b> Probe_Fn = <i>default explained below.</i>
- <b>typename</b> Resize_Policy = <i>default explained below.</i>
- <b>bool</b> Store_Hash = <b>false</b>,
- <b>typename</b> Allocator = std::allocator<<b>char</b>> >
-<b>class</b> <a href=
-"gp_hash_table.html">gp_hash_table</a>;
-</pre>
-
- <p>The parameters are identical to those of the
- collision-chaining container, except for the following.</p>
-
- <ol>
- <li><tt>Comb_Probe_Fn</tt> describes how to transform a probe
- sequence into a sequence of positions within the table.</li>
-
- <li><tt>Probe_Fn</tt> describes a probe sequence policy.</li>
- </ol>
-
- <p>Some of the default template values depend on the values of
- other parameters, and are explained in <a href=
- "#policy_interaction">Policy Interaction</a>.</p>
-
- <h2><a name="hash_policies" id="hash_policies">Hash
- Policies</a></h2>
-
- <h3><a name="general_terms" id="general_terms">General
- Terms</a></h3>
-
- <p>Following is an explanation of some functions which hashing
- involves. Figure <a href=
- "#hash_ranged_hash_range_hashing_fns">Hash functions,
- ranged-hash functions, and range-hashing functions</a>)
- illustrates the discussion.</p>
-
- <h6 class="c1"><a name="hash_ranged_hash_range_hashing_fns" id=
- "hash_ranged_hash_range_hashing_fns"><img src=
- "hash_ranged_hash_range_hashing_fns.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Hash functions, ranged-hash functions, and
- range-hashing functions.</h6>
-
- <p>Let <i>U</i> be a domain (<i>e.g.</i>, the integers, or the
- strings of 3 characters). A hash-table algorithm needs to map
- elements of <i>U</i> "uniformly" into the range <i>[0,..., m -
- 1]</i> (where <i>m</i> is a non-negative integral value, and
- is, in general, time varying). <i>I.e.</i>, the algorithm needs
- a <i>ranged-hash</i> function</p>
-
- <p><i>f : U × Z<sub>+</sub> → Z<sub>+</sub></i>
- ,</p>
-
- <p>such that for any <i>u</i> in <i>U</i> ,</p>
-
- <p><i>0 ≤ f(u, m) ≤ m - 1</i> ,</p>
-
- <p>and which has "good uniformity" properties [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>]. One
- common solution is to use the composition of the hash
- function</p>
-
- <p><i>h : U → Z<sub>+</sub></i> ,</p>
-
- <p>which maps elements of <i>U</i> into the non-negative
- integrals, and</p>
-
- <p class="c2">g : Z<sub>+</sub> × Z<sub>+</sub> →
- Z<sub>+</sub>,</p>
-
- <p>which maps a non-negative hash value, and a non-negative
- range upper-bound into a non-negative integral in the range
- between 0 (inclusive) and the range upper bound (exclusive),
- <i>i.e.</i>, for any <i>r</i> in <i>Z<sub>+</sub></i>,</p>
-
- <p><i>0 ≤ g(r, m) ≤ m - 1</i> .</p>
-
- <p>The resulting ranged-hash function, is</p>
-
- <p><i><a name="ranged_hash_composed_of_hash_and_range_hashing"
- id="ranged_hash_composed_of_hash_and_range_hashing">f(u , m) =
- g(h(u), m)</a></i> (1) .</p>
-
- <p>From the above, it is obvious that given <i>g</i> and
- <i>h</i>, <i>f</i> can always be composed (however the converse
- is not true). The STL's hash-based containers allow specifying
- a hash function, and use a hard-wired range-hashing function;
- the ranged-hash function is implicitly composed.</p>
-
- <p>The above describes the case where a key is to be mapped
- into a <i>single position</i> within a hash table, <i>e.g.</i>,
- in a collision-chaining table. In other cases, a key is to be
- mapped into a <i>sequence of positions</i> within a table,
- <i>e.g.</i>, in a probing table. Similar terms apply in this
- case: the table requires a <i>ranged probe</i> function,
- mapping a key into a sequence of positions withing the table.
- This is typically achieved by composing a <i>hash function</i>
- mapping the key into a non-negative integral type, a
- <i>probe</i> function transforming the hash value into a
- sequence of hash values, and a <i>range-hashing</i> function
- transforming the sequence of hash values into a sequence of
- positions.</p>
-
- <h3><a name="range_hashing_fns" id=
- "range_hashing_fns">Range-Hashing Functions</a></h3>
-
- <p>Some common choices for range-hashing functions are the
- division, multiplication, and middle-square methods [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>], defined
- as</p>
-
- <p><i><a name="division_method" id="division_method">g(r, m) =
- r mod m</a></i> (2) ,</p>
-
- <p><i>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</i> ,</p>
-
- <p>and</p>
-
- <p><i>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</i>
- ,</p>
-
- <p>respectively, for some positive integrals <i>u</i> and
- <i>v</i> (typically powers of 2), and some <i>a</i>. Each of
- these range-hashing functions works best for some different
- setting.</p>
-
- <p>The division method <a href="#division_method">(2)</a> is a
- very common choice. However, even this single method can be
- implemented in two very different ways. It is possible to
- implement <a href="#division_method">(2)</a> using the low
- level <i>%</i> (modulo) operation (for any <i>m</i>), or the
- low level <i>&</i> (bit-mask) operation (for the case where
- <i>m</i> is a power of 2), <i>i.e.</i>,</p>
-
- <p><i><a name="division_method_prime_mod" id=
- "division_method_prime_mod">g(r, m) = r % m</a></i> (3) ,</p>
-
- <p>and</p>
-
- <p><i><a name="division_method_bit_mask" id=
- "division_method_bit_mask">g(r, m) = r & m - 1, (m =
- 2<sup>k</sup>)</a></i> for some <i>k)</i> (4),</p>
-
- <p>respectively.</p>
-
- <p>The <i>%</i> (modulo) implementation <a href=
- "#division_method_prime_mod">(3)</a> has the advantage that for
- <i>m</i> a prime far from a power of 2, <i>g(r, m)</i> is
- affected by all the bits of <i>r</i> (minimizing the chance of
- collision). It has the disadvantage of using the costly modulo
- operation. This method is hard-wired into SGI's implementation
- [<a href="references.html#sgi_stl">sgi_stl</a>].</p>
-
- <p>The <i>&</i> (bit-mask) implementation <a href=
- "#division_method_bit_mask">(4)</a> has the advantage of
- relying on the fast bit-wise and operation. It has the
- disadvantage that for <i>g(r, m)</i> is affected only by the
- low order bits of <i>r</i>. This method is hard-wired into
- Dinkumware's implementation [<a href=
- "references.html#dinkumware_stl">dinkumware_stl</a>].</p>
-
- <h3><a name="hash_policies_ranged_hash_policies" id=
- "hash_policies_ranged_hash_policies">Ranged-Hash
- Functions</a></h3>
-
- <p>In cases it is beneficial to allow the
- client to directly specify a ranged-hash hash function. It is
- true, that the writer of the ranged-hash function cannot rely
- on the values of <i>m</i> having specific numerical properties
- suitable for hashing (in the sense used in [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>]), since
- the values of <i>m</i> are determined by a resize policy with
- possibly orthogonal considerations.</p>
-
- <p>There are two cases where a ranged-hash function can be
- superior. The firs is when using perfect hashing [<a href=
- "references.html#knuth98sorting">knuth98sorting</a>]; the
- second is when the values of <i>m</i> can be used to estimate
- the "general" number of distinct values required. This is
- described in the following.</p>
-
- <p>Let</p>
-
- <p class="c2">s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]</p>
-
- <p>be a string of <i>t</i> characters, each of which is from
- domain <i>S</i>. Consider the following ranged-hash
- function:</p>
-
- <p><a name="total_string_dna_hash" id=
- "total_string_dna_hash"><i>f<sub>1</sub>(s, m) = ∑ <sub>i =
- 0</sub><sup>t - 1</sup> s<sub>i</sub> a<sup>i</sup></i> mod
- <i>m</i></a> (5) ,</p>
-
- <p>where <i>a</i> is some non-negative integral value. This is
- the standard string-hashing function used in SGI's
- implementation (with <i>a = 5</i>) [<a href=
- "references.html#sgi_stl">sgi_stl</a>]. Its advantage is that
- it takes into account all of the characters of the string.</p>
-
- <p>Now assume that <i>s</i> is the string representation of a
- of a long DNA sequence (and so <i>S = {'A', 'C', 'G',
- 'T'}</i>). In this case, scanning the entire string might be
- prohibitively expensive. A possible alternative might be to use
- only the first <i>k</i> characters of the string, where</p>
-
- <p>|S|<sup>k</sup> ≥ m ,</p>
-
- <p><i>i.e.</i>, using the hash function</p>
-
- <p><a name="only_k_string_dna_hash" id=
- "only_k_string_dna_hash"><i>f<sub>2</sub>(s, m) = ∑ <sub>i
- = 0</sub><sup>k - 1</sup> s<sub>i</sub> a<sup>i</sup></i> mod
- <i>m</i></a> , (6)</p>
-
- <p>requiring scanning over only</p>
-
- <p><i>k =</i> log<i><sub>4</sub>( m )</i></p>
-
- <p>characters.</p>
-
- <p>Other more elaborate hash-functions might scan <i>k</i>
- characters starting at a random position (determined at each
- resize), or scanning <i>k</i> random positions (determined at
- each resize), <i>i.e.</i>, using</p>
-
- <p><i>f<sub>3</sub>(s, m) = ∑ <sub>i =
- r</sub>0</i><sup>r<sub>0</sub> + k - 1</sup> s<sub>i</sub>
- a<sup>i</sup> mod <i>m</i> ,</p>
-
- <p>or</p>
-
- <p><i>f<sub>4</sub>(s, m) = ∑ <sub>i = 0</sub><sup>k -
- 1</sup> s<sub>r</sub>i</i> a<sup>r<sub>i</sub></sup> mod
- <i>m</i> ,</p>
-
- <p>respectively, for <i>r<sub>0</sub>,..., r<sub>k-1</sub></i>
- each in the (inclusive) range <i>[0,...,t-1]</i>.</p>
-
- <p>It should be noted that the above functions cannot be
- decomposed as <a href=
- "#ranged_hash_composed_of_hash_and_range_hashing">(1)</a> .</p>
-
- <h3><a name="pb_ds_imp" id="pb_ds_imp">Implementation</a></h3>
-
- <p>This sub-subsection describes the implementation of the
- above in <tt>pb_ds</tt>. It first explains range-hashing
- functions in collision-chaining tables, then ranged-hash
- functions in collision-chaining tables, then probing-based
- tables, and, finally, lists the relevant classes in
- <tt>pb_ds</tt>.</p>
-
- <h4>Range-Hashing and Ranged-Hashes in Collision-Chaining
- Tables</h4>
-
- <p><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> is
- parametrized by <tt>Hash_Fn</tt> and <tt>Comb_Hash_Fn</tt>, a
- hash functor and a combining hash functor, respectively.</p>
-
- <p>In general, <tt>Comb_Hash_Fn</tt> is considered a
- range-hashing functor. <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>
- synthesizes a ranged-hash function from <tt>Hash_Fn</tt> and
- <tt>Comb_Hash_Fn</tt> (see <a href=
- "#ranged_hash_composed_of_hash_and_range_hashing">(1)</a>
- above). Figure <a href="#hash_range_hashing_seq_diagram">Insert
- hash sequence diagram</a> shows an <tt>insert</tt> sequence
- diagram for this case. The user inserts an element (point A),
- the container transforms the key into a non-negative integral
- using the hash functor (points B and C), and transforms the
- result into a position using the combining functor (points D
- and E).</p>
-
- <h6 class="c1"><a name="hash_range_hashing_seq_diagram" id=
- "hash_range_hashing_seq_diagram"><img src=
- "hash_range_hashing_seq_diagram.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Insert hash sequence diagram.</h6>
-
- <p>If <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>'s
- hash-functor, <tt>Hash_Fn</tt> is instantiated by <a href=
- "null_hash_fn.html"><tt>null_hash_fn</tt></a> (see <a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a>), then <tt>Comb_Hash_Fn</tt> is taken to be
- a ranged-hash function. Figure <a href=
- "#hash_range_hashing_seq_diagram2">Insert hash sequence diagram
- with a null hash policy</a> shows an <tt>insert</tt> sequence
- diagram. The user inserts an element (point A), the container
- transforms the key into a position using the combining functor
- (points B and C).</p>
-
- <h6 class="c1"><a name="hash_range_hashing_seq_diagram2" id=
- "hash_range_hashing_seq_diagram2"><img src=
- "hash_range_hashing_seq_diagram2.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Insert hash sequence diagram with a null hash
- policy.</h6>
-
- <h4>Probing Tables</h4>
-
- <p><a href=
- "gp_hash_table.html"></a><tt>gp_hash_table</tt> is
- parametrized by <tt>Hash_Fn</tt>, <tt>Probe_Fn</tt>, and
- <tt>Comb_Probe_Fn</tt>. As before, if <tt>Hash_Fn</tt> and
- <tt>Probe_Fn</tt> are, respectively, <a href=
- "null_hash_fn.html"><tt>null_hash_fn</tt></a> and <a href=
- "null_probe_fn.html"><tt>null_probe_fn</tt></a>, then
- <tt>Comb_Probe_Fn</tt> is a ranged-probe functor. Otherwise,
- <tt>Hash_Fn</tt> is a hash functor, <tt>Probe_Fn</tt> is a
- functor for offsets from a hash value, and
- <tt>Comb_Probe_Fn</tt> transforms a probe sequence into a
- sequence of positions within the table.</p>
-
- <h4>Pre-Defined Policies</h4>
-
- <p><tt>pb_ds</tt> contains some pre-defined classes
- implementing range-hashing and probing functions:</p>
-
- <ol>
- <li><a href=
- "direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
- and <a href=
- "direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
- are range-hashing functions based on a bit-mask and a modulo
- operation, respectively.</li>
-
- <li><a href=
- "linear_probe_fn.html"><tt>linear_probe_fn</tt></a>, and
- <a href=
- "quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a> are
- a linear probe and a quadratic probe function,
- respectively.</li>
- </ol>Figure <a href="#hash_policy_cd">Hash policy class
- diagram</a> shows a class diagram.
-
- <h6 class="c1"><a name="hash_policy_cd" id=
- "hash_policy_cd"><img src="hash_policy_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Hash policy class diagram.</h6>
-
- <h2><a name="resize_policies" id="resize_policies">Resize
- Policies</a></h2>
-
- <h3><a name="general" id="general">General Terms</a></h3>
-
- <p>Hash-tables, as opposed to trees, do not naturally grow or
- shrink. It is necessary to specify policies to determine how
- and when a hash table should change its size. Usually, resize
- policies can be decomposed into orthogonal policies:</p>
-
- <ol>
- <li>A <i>size policy</i> indicating <i>how</i> a hash table
- should grow (<i>e.g.,</i> it should multiply by powers of
- 2).</li>
-
- <li>A <i>trigger policy</i> indicating <i>when</i> a hash
- table should grow (<i>e.g.,</i> a load factor is
- exceeded).</li>
- </ol>
-
- <h3><a name="size_policies" id="size_policies">Size
- Policies</a></h3>
-
- <p>Size policies determine how a hash table changes size. These
- policies are simple, and there are relatively few sensible
- options. An exponential-size policy (with the initial size and
- growth factors both powers of 2) works well with a mask-based
- range-hashing function (see <a href=
- "#hash_policies">Range-Hashing Policies</a>), and is the
- hard-wired policy used by Dinkumware [<a href=
- "references.html#dinkumware_stl">dinkumware_stl</a>]. A
- prime-list based policy works well with a modulo-prime range
- hashing function (see <a href="#hash_policies">Range-Hashing
- Policies</a>), and is the hard-wired policy used by SGI's
- implementation [<a href=
- "references.html#sgi_stl">sgi_stl</a>].</p>
-
- <h3><a name="trigger_policies" id="trigger_policies">Trigger
- Policies</a></h3>
-
- <p>Trigger policies determine when a hash table changes size.
- Following is a description of two policies: <i>load-check</i>
- policies, and collision-check policies.</p>
-
- <p>Load-check policies are straightforward. The user specifies
- two factors, <i>α<sub>min</sub></i> and
- <i>α<sub>max</sub></i>, and the hash table maintains the
- invariant that</p>
-
- <p><i><a name="load_factor_min_max" id=
- "load_factor_min_max">α<sub>min</sub> ≤ (number of
- stored elements) / (hash-table size) ≤
- α<sub>max</sub></a></i> (1) .</p>
-
- <p>Collision-check policies work in the opposite direction of
- load-check policies. They focus on keeping the number of
- collisions moderate and hoping that the size of the table will
- not grow very large, instead of keeping a moderate load-factor
- and hoping that the number of collisions will be small. A
- maximal collision-check policy resizes when the longest
- probe-sequence grows too large.</p>
-
- <p>Consider Figure <a href="#balls_and_bins">Balls and
- bins</a>. Let the size of the hash table be denoted by
- <i>m</i>, the length of a probe sequence be denoted by
- <i>k</i>, and some load factor be denoted by α. We would
- like to calculate the minimal length of <i>k</i>, such that if
- there were <i>α m</i> elements in the hash table, a probe
- sequence of length <i>k</i> would be found with probability at
- most <i>1/m</i>.</p>
-
- <h6 class="c1"><a name="balls_and_bins" id=
- "balls_and_bins"><img src="balls_and_bins.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Balls and bins.</h6>
-
- <p>Denote the probability that a probe sequence of length
- <i>k</i> appears in bin <i>i</i> by <i>p<sub>i</sub></i>, the
- length of the probe sequence of bin <i>i</i> by
- <i>l<sub>i</sub></i>, and assume uniform distribution. Then</p>
-
- <p><a name="prob_of_p1" id=
- "prob_of_p1"><i>p<sub>1</sub></i></a> = (3)</p>
-
- <p class="c2"><b>P</b>(l<sub>1</sub> ≥ k) =</p>
-
- <p><i><b>P</b>(l<sub>1</sub> ≥ α ( 1 + k / α - 1
- ) ≤</i> (a)</p>
-
- <p><i>e ^ ( - ( α ( k / α - 1 )<sup>2</sup> ) /2
- )</i> ,</p>
-
- <p>where (a) follows from the Chernoff bound [<a href=
- "references.html#motwani95random">motwani95random</a>]. To
- calculate the probability that <i>some</i> bin contains a probe
- sequence greater than <i>k</i>, we note that the
- <i>l<sub>i</sub></i> are negatively-dependent [<a href=
- "references.html#dubhashi98neg">dubhashi98neg</a>]. Let
- <i><b>I</b>(.)</i> denote the indicator function. Then</p>
-
- <p><a name="at_least_k_i_n_some_bin" id=
- "at_least_k_i_n_some_bin"><i><b>P</b>( exists<sub>i</sub>
- l<sub>i</sub> ≥ k ) =</i> (3)</a></p>
-
- <p class="c2"><b>P</b> ( ∑ <sub>i = 1</sub><sup>m</sup>
- <b>I</b>(l<sub>i</sub> ≥ k) ≥ 1 ) =</p>
-
- <p><i><b>P</b> ( ∑ <sub>i = 1</sub><sup>m</sup> <b>I</b> (
- l<sub>i</sub> ≥ k ) ≥ m p<sub>1</sub> ( 1 + 1 / (m
- p<sub>1</sub>) - 1 ) ) ≤</i> (a)</p>
-
- <p class="c2">e ^ ( ( - m p<sub>1</sub> ( 1 / (m p<sub>1</sub>)
- - 1 ) <sup>2</sup> ) / 2 ) ,</p>
-
- <p>where (a) follows from the fact that the Chernoff bound can
- be applied to negatively-dependent variables [<a href=
- "references.html#dubhashi98neg">dubhashi98neg</a>]. Inserting
- <a href="#prob_of_p1">(2)</a> into <a href=
- "#at_least_k_i_n_some_bin">(3)</a>, and equating with
- <i>1/m</i>, we obtain</p>
-
- <p><i>k ~ √ ( 2 α</i> ln <i>2 m</i> ln<i>(m) )
- )</i> .</p>
-
- <h3><a name="imp_pb_ds" id="imp_pb_ds">Implementation</a></h3>
-
- <p>This sub-subsection describes the implementation of the
- above in <tt>pb_ds</tt>. It first describes resize policies and
- their decomposition into trigger and size policies, then
- describes pre-defined classes, and finally discusses controlled
- access the policies' internals.</p>
-
- <h4>Resize Policies and Their Decomposition</h4>
-
- <p>Each hash-based container is parametrized by a
- <tt>Resize_Policy</tt> parameter; the container derives
- <tt><b>public</b></tt>ly from <tt>Resize_Policy</tt>. For
- example:</p>
- <pre>
-<a href="cc_hash_table.html">cc_hash_table</a><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- ...
- <b>typename</b> Resize_Policy
- ...> :
- <b>public</b> Resize_Policy
-</pre>
-
- <p>As a container object is modified, it continuously notifies
- its <tt>Resize_Policy</tt> base of internal changes
- (<i>e.g.</i>, collisions encountered and elements being
- inserted). It queries its <tt>Resize_Policy</tt> base whether
- it needs to be resized, and if so, to what size.</p>
-
- <p>Figure <a href="#insert_resize_sequence_diagram1">Insert
- resize sequence diagram</a> shows a (possible) sequence diagram
- of an insert operation. The user inserts an element; the hash
- table notifies its resize policy that a search has started
- (point A); in this case, a single collision is encountered -
- the table notifies its resize policy of this (point B); the
- container finally notifies its resize policy that the search
- has ended (point C); it then queries its resize policy whether
- a resize is needed, and if so, what is the new size (points D
- to G); following the resize, it notifies the policy that a
- resize has completed (point H); finally, the element is
- inserted, and the policy notified (point I).</p>
-
- <h6 class="c1"><a name="insert_resize_sequence_diagram1" id=
- "insert_resize_sequence_diagram1"><img src=
- "insert_resize_sequence_diagram1.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Insert resize sequence diagram.</h6>
-
- <p>In practice, a resize policy can be usually orthogonally
- decomposed to a size policy and a trigger policy. Consequently,
- the library contains a single class for instantiating a resize
- policy: <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- is parametrized by <tt>Size_Policy</tt> and
- <tt>Trigger_Policy</tt>, derives <tt><b>public</b></tt>ly from
- both, and acts as a standard delegate [<a href=
- "references.html#gamma95designpatterns">gamma95designpatterns</a>]
- to these policies.</p>
-
- <p>Figures <a href="#insert_resize_sequence_diagram2">Standard
- resize policy trigger sequence diagram</a> and <a href=
- "#insert_resize_sequence_diagram3">Standard resize policy size
- sequence diagram</a> show sequence diagrams illustrating the
- interaction between the standard resize policy and its trigger
- and size policies, respectively.</p>
-
- <h6 class="c1"><a name="insert_resize_sequence_diagram2" id=
- "insert_resize_sequence_diagram2"><img src=
- "insert_resize_sequence_diagram2.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Standard resize policy trigger sequence
- diagram.</h6>
-
- <h6 class="c1"><a name="insert_resize_sequence_diagram3" id=
- "insert_resize_sequence_diagram3"><img src=
- "insert_resize_sequence_diagram3.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Standard resize policy size sequence
- diagram.</h6>
-
- <h4>Pre-Defined Policies</h4>
-
- <p>The library includes the following
- instantiations of size and trigger policies:</p>
-
- <ol>
- <li><a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- implements a load check trigger policy.</li>
-
- <li><a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>
- implements a collision check trigger policy.</li>
-
- <li><a href=
- "hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
- implements an exponential-size policy (which should be used
- with mask range hashing).</li>
-
- <li><a href=
- "hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
- implementing a size policy based on a sequence of primes
- [<a href="references.html#sgi_stl">sgi_stl</a>] (which should
- be used with mod range hashing</li>
- </ol>
-
- <p>Figure <a href="#resize_policy_cd">Resize policy class
- diagram</a> gives an overall picture of the resize-related
- classes. <a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- is parametrized by <tt>Resize_Policy</tt>, which it subclasses
- publicly. This class is currently instantiated only by <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>.
- <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- itself is parametrized by <tt>Trigger_Policy</tt> and
- <tt>Size_Policy</tt>. Currently, <tt>Trigger_Policy</tt> is
- instantiated by <a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>,
- or <a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>;
- <tt>Size_Policy</tt> is instantiated by <a href=
- "hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>,
- or <a href=
- "hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>.</p>
-
- <h6 class="c1"><a name="resize_policy_cd" id=
- "resize_policy_cd"><img src="resize_policy_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Resize policy class diagram.</h6>
-
- <h4>Controlled Access to Policies' Internals</h4>
-
- <p>There are cases where (controlled) access to resize
- policies' internals is beneficial. <i>E.g.</i>, it is sometimes
- useful to query a hash-table for the table's actual size (as
- opposed to its <tt>size()</tt> - the number of values it
- currently holds); it is sometimes useful to set a table's
- initial size, externally resize it, or change load factors.</p>
-
- <p>Clearly, supporting such methods both decreases the
- encapsulation of hash-based containers, and increases the
- diversity between different associative-containers' interfaces.
- Conversely, omitting such methods can decrease containers'
- flexibility.</p>
-
- <p>In order to avoid, to the extent possible, the above
- conflict, the hash-based containers themselves do not address
- any of these questions; this is deferred to the resize policies,
- which are easier to change or replace. Thus, for example,
- neither <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> nor
- <a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a>
- contain methods for querying the actual size of the table; this
- is deferred to <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>.</p>
-
- <p>Furthermore, the policies themselves are parametrized by
- template arguments that determine the methods they support
- ([<a href=
- "references.html#alexandrescu01modern">alexandrescu01modern</a>]
- shows techniques for doing so). <a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- is parametrized by <tt>External_Size_Access</tt> that
- determines whether it supports methods for querying the actual
- size of the table or resizing it. <a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- is parametrized by <tt>External_Load_Access</tt> that
- determines whether it supports methods for querying or
- modifying the loads. <a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>
- is parametrized by <tt>External_Load_Access</tt> that
- determines whether it supports methods for querying the
- load.</p>
-
- <p>Some operations, for example, resizing a container at
- run time, or changing the load factors of a load-check trigger
- policy, require the container itself to resize. As mentioned
- above, the hash-based containers themselves do not contain
- these types of methods, only their resize policies.
- Consequently, there must be some mechanism for a resize policy
- to manipulate the hash-based container. As the hash-based
- container is a subclass of the resize policy, this is done
- through virtual methods. Each hash-based container has a
- <tt><b>private</b></tt> <tt><b>virtual</b></tt> method:</p>
- <pre>
-<b>virtual void</b>
- do_resize
- (size_type new_size);
-</pre>
-
- <p>which resizes the container. Implementations of
- <tt>Resize_Policy</tt> can export public methods for resizing
- the container externally; these methods internally call
- <tt>do_resize</tt> to resize the table.</p>
-
- <h2><a name="policy_interaction" id="policy_interaction">Policy
- Interaction</a></h2>
-
- <p>Hash-tables are unfortunately especially susceptible to
- choice of policies. One of the more complicated aspects of this
- is that poor combinations of good policies can form a poor
- container. Following are some considerations.</p>
-
- <h3><a name="policy_interaction_probe_size_trigger" id=
- "policy_interaction_probe_size_trigger">Probe Policies, Size
- Policies, and Trigger Policies</a></h3>
-
- <p>Some combinations do not work well for probing containers.
- For example, combining a quadratic probe policy with an
- exponential size policy can yield a poor container: when an
- element is inserted, a trigger policy might decide that there
- is no need to resize, as the table still contains unused
- entries; the probe sequence, however, might never reach any of
- the unused entries.</p>
-
- <p>Unfortunately, <tt>pb_ds</tt> cannot detect such problems at
- compilation (they are halting reducible). It therefore defines
- an exception class <a href=
- "insert_error.html"><tt>insert_error</tt></a> to throw an
- exception in this case.</p>
-
- <h3><a name="policy_interaction_hash_trigger" id=
- "policy_interaction_hash_trigger">Hash Policies and Trigger
- Policies</a></h3>
-
- <p>Some trigger policies are especially susceptible to poor
- hash functions. Suppose, as an extreme case, that the hash
- function transforms each key to the same hash value. After some
- inserts, a collision detecting policy will always indicate that
- the container needs to grow.</p>
-
- <p>The library, therefore, by design, limits each operation to
- one resize. For each <tt>insert</tt>, for example, it queries
- only once whether a resize is needed.</p>
-
- <h3><a name="policy_interaction_eq_sth_hash" id=
- "policy_interaction_eq_sth_hash">Equivalence Functors, Storing
- Hash Values, and Hash Functions</a></h3>
-
- <p><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> and
- <a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a> are
- parametrized by an equivalence functor and by a
- <tt>Store_Hash</tt> parameter. If the latter parameter is
- <tt><b>true</b></tt>, then the container stores with each entry
- a hash value, and uses this value in case of collisions to
- determine whether to apply a hash value. This can lower the
- cost of collision for some types, but increase the cost of
- collisions for other types.</p>
-
- <p>If a ranged-hash function or ranged probe function is
- directly supplied, however, then it makes no sense to store the
- hash value with each entry. <tt>pb_ds</tt>'s container will
- fail at compilation, by design, if this is attempted.</p>
-
- <h3><a name="policy_interaction_size_load_check" id=
- "policy_interaction_size_load_check">Size Policies and
- Load-Check Trigger Policies</a></h3>
-
- <p>Assume a size policy issues an increasing sequence of sizes
- <i>a, a q, a q<sup>1</sup>, a q<sup>2</sup>, ...</i> For
- example, an exponential size policy might issue the sequence of
- sizes <i>8, 16, 32, 64, ...</i></p>
-
- <p>If a load-check trigger policy is used, with loads
- <i>α<sub>min</sub></i> and <i>α<sub>max</sub></i>,
- respectively, then it is a good idea to have:</p>
-
- <ol>
- <li><i>α<sub>max</sub> ~ 1 / q</i></li>
-
- <li><i>α<sub>min</sub> < 1 / (2 q)</i></li>
- </ol>
-
- <p>This will ensure that the amortized hash cost of each
- modifying operation is at most approximately 3.</p>
-
- <p><i>α<sub>min</sub> ~ α<sub>max</sub></i> is, in
- any case, a bad choice, and <i>α<sub>min</sub> >
- α<sub>max</sub></i> is horrendous.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>hash_exponential_size_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>hash_exponential_size_policy</tt> Interface</h1>
-
- <p>A size policy whose sequence of sizes form an exponential
- sequence (typically powers of 2)</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_exponential_size_policy
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> start_size = 8,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> grow_factor = 2)
-</pre>
- </td>
-
- <td>
- <p>Default constructor, or constructor taking a
- <span class="c1"><tt>start_size</tt></span>, or
- constructor taking a start size and <span class=
- "c1"><tt>grow_factor</tt></span>. The policy will use the
- sequence of sizes <span class=
- "c1"><tt>start_size</tt></span>, <span class=
- "c1"><tt>start_size</tt></span> * <span class=
- "c1"><tt>grow_factor</tt></span>, <span class=
- "c1"><tt>start_size</tt></span> * <span class=
- "c1"><tt>grow_factor</tt></span>^2, ...</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>hash_exponential_size_policy</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Protected Methods</a></h2>
-
- <h3><a name="link7" id="link7">Size methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_larger_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is larger.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_smaller_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is smaller.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>hash_load_check_resize_trigger Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>hash_load_check_resize_trigger</tt> Interface</h1>
-
- <p>A resize trigger policy based on a load check. It keeps the
- load factor between some load factors load_min and
- load_max.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="External_Load_Access1313998607" id=
-"External_Load_Access1313998607"><b>bool</b> External_Load_Access </a>
-</pre>
- </td>
-
- <td>
- <p>Specifies whether the load factor can be accessed
- externally. The two options have different trade-offs in
- terms of flexibility, genericity, and encapsulation.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="external_load_access3976598639" id=
-"external_load_access3976598639">external_load_access</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether loads can be accessed externally</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_load_check_resize_trigger
- (float load_min = 0.125,
- float load_max = 0.5)
-</pre>
- </td>
-
- <td>
- <p>Default constructor, or constructor taking
- <span class="c1"><tt>load_min</tt></span> and
- <span class="c1"><tt>load_max</tt></span> load factors
- between which this policy will keep the actual load.</p>
-
- <p>It is the responsibility of the user to ensure that
- <span class="c1"><tt>load_min</tt></span> is smaller than
- <span class="c1"><tt>load_max</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>hash_load_check_resize_trigger</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- <b>virtual</b>
- ~hash_load_check_resize_trigger
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Load Access Methods</a></h3>
-
- <p>These methods are only available if the external access
- parameter is set.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> std::pair<float, float>
- get_loads
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a pair of the minimal and maximal loads,
- respectively.</p>
-
- <p>Calling this method will not compile when <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- set_loads
- (std::pair<float, float> load_pair)
-</pre>
- </td>
-
- <td>
- <p>Sets the loads through a pair of the minimal and
- maximal loads, respectively.</p>
-
- <p>Calling this method resizes the container, and might
- throw an exception. It is the responsibility of the user
- to pass appropriate loads to this function. Calling this
- method will not compile when <a href=
- "#External_Load_Access1313998607"><tt>External_Load_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link7" id="link7">Protected Methods</a></h2>
-
- <h3><a name="link8" id="link8">Insert Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Find Search
- Notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Erase Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Content Change
- Notifications.</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted. the total number of
- entries in the table is <span class=
- "c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Size Change
- Notifications.</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized as a result of this
- object's signifying that a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_externally_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized externally.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Queries</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_grow_needed
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_entries) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a grow is needed.</p>
-
- <p>This method is called only if this object indicated
- resize is needed. The actual <span class=
- "c1"><tt>size</tt></span> of the table is <span class=
- "c1"><tt>size</tt></span>, and the number of entries in
- it is <span class="c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link14" id="link14">Private Methods</a></h2>
-
- <h3><a name="link15" id="link15">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>void</b>
- do_resize
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>hash_prime_size_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>hash_prime_size_policy</tt> Interface</h1>
-
- <p>A size policy whose sequence of sizes form a
- nearly-exponential sequence of primes.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_prime_size_policy
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> start_size = 8)
-</pre>
- </td>
-
- <td>
- <p>Default constructor, or constructor taking a
- <span class="c1"><tt>start_size</tt></span> The policy
- will use the sequence of sizes approximately <span class=
- "c1"><tt>start_size</tt></span>, <span class=
- "c1"><tt>start_size</tt></span> * 2, <span class=
- "c1"><tt>start_size</tt></span> * 2^2, ...</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (<span class=
-"c2"><tt>hash_prime_size_policy</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Size methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_larger_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is larger.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_smaller_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is smaller.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Locality of Reference Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Erase Memory-Use Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of uniform i.i.d. integer keys
- into a container, then erases all keys except one. It measures
- the final size of the container.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc"><tt>hash_random_int_erase_mem_usage.cc</tt></a>
- 2000 2000 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks how containers adjust internally as their
- logical size decreases (see <a href="motivation.html#assoc_ers_methods">Motivation::Associative
- Containers::Slightly Different Methods::Methods Related to
- Erase</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NHG">NHG</a>, <a href="#NHM">NHM</a> and
- <a href="#NHL">NHL</a> show the results for the native and
- collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a> and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_hash_random_int_erase_mem_usage_test">
-<div id="NHG_assoc">
-<div id="NHG_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="hash_random_int_erase_mem_usage_test_gcc.png" alt="no image" /></a></h6>NHG: Native, collision-chaing, and probing, hash random int erase test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_set_ncah-
-<tt>std::tr1::unordered_set</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_hash_random_int_erase_mem_usage_test">
-<div id="NHM_assoc">
-<div id="NHM_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="hash_random_int_erase_mem_usage_test_msvc.png" alt="no image" /></a></h6>NHM: Native, collision-chaing, and probing, hash random int erase test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_set_ncah-
-<tt>stdext::hash_set</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_hash_random_int_erase_mem_usage_test">
-<div id="NHM_assoc">
-<div id="NHM_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="hash_random_int_erase_mem_usage_test_msvc.png" alt="no image" /></a></h6>NHM: Native, collision-chaing, and probing, hash random int erase test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_set_ncah-
-<tt>stdext::hash_set</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_hash_random_int_erase_mem_usage_test">
-<div id="NHL_assoc">
-<div id="NHL_Native_456_collision-chaing_456_and_probing_456_hash_random_int_erase_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="hash_random_int_erase_mem_usage_test_local.png" alt="no image" /></a></h6>NHL: Native, collision-chaing, and probing, hash random int erase test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>STL hash-based containers act very differently than trees in
- this respect. When erasing numerous keys from an STL
- associative-container, the resulting memory user varies greatly
- depending on whether the container is tree-based or hash-based.
- As noted in <a href="motivation.html#assoc_methods">Motivation::Choice of
- Methods</a> , this is a fundamental consequence of the STL's
- associative containers' interface, it is not due to a specific
- implementation.</p>
-<p>(See <a href="priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a> for a similar phenomenon
- regarding priority queues.)</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Random Int Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Random-Integer <tt>find</tt> Find Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with uniform i.i.d.
- integer keys into a container, then performs a series of finds
- using <tt>find</tt>. It measures the average time
- for<tt>find</tt> as a function of the number of values
- inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/random_int_find_timing.cc"><tt>random_int_find_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- hash-tables (see <a href="hash_based_containers.html">Design::Associative
- Containers::Associative Containers::Hash-Based Containers</a>),
- range-hashing functions, and trigger policies (see <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> and
- <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>,
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NGPG">NGPG</a>, <a href="#NGPM">NGPM</a>, and <a href="#NGPL">NGPL</a> show the results
- for the native and probing types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>
- respectively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_cc_hash_random_int_find_timing_test">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="cc_hash_random_int_find_timing_test_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_cc_hash_random_int_find_timing_test">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="cc_hash_random_int_find_timing_test_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_cc_hash_random_int_find_timing_test">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="cc_hash_random_int_find_timing_test_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPG_res_div">
-<div id="NGPG_gcc">
-<div id="NGPG_gp_hash_random_int_find_timing_test">
-<div id="NGPG_assoc">
-<div id="NGPG_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPG" id="NGPG"><img src="gp_hash_random_int_find_timing_test_gcc.png" alt="no image" /></a></h6>NGPG: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPM_res_div">
-<div id="NGPM_msvc">
-<div id="NGPM_gp_hash_random_int_find_timing_test">
-<div id="NGPM_assoc">
-<div id="NGPM_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPM" id="NGPM"><img src="gp_hash_random_int_find_timing_test_msvc.png" alt="no image" /></a></h6>NGPM: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPL_res_div">
-<div id="NGPL_local">
-<div id="NGPL_gp_hash_random_int_find_timing_test">
-<div id="NGPL_assoc">
-<div id="NGPL_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPL" id= "NGPL"><img src="gp_hash_random_int_find_timing_test_local.png" alt="no image" /></a></h6>NGPL: Native and collision-chaining hash random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, the choice of underlying hash-table (see
- <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a> ) affects performance
- most, then the range-hashing scheme (See <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> ), and,
- only finally, other policies.</p>
-<p>When comparing Figures <a href="#NCCG">NCCG</a> and <a href="#NCCM">NCCM</a> to <a href="#NGPG">NGPG</a> and <a href="#NGPM">NGPM</a> , respectively, it is apparent that the
- probing containers are less efficient than the
- collision-chaining containers (both
- <tt>std::tr1::unordered_map</tt> and <tt>stdext::hash_map</tt>
- use collision-chaining) in this case.</p>
-<p>( <a href="hash_random_int_subscript_insert_timing_test.html">Hash-Based
- Random-Integer Subscript Insert Timing Test</a> shows a
- different case, where the situation is reversed; <a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> discusses some further considerations.)</p>
-<p>Within each type of hash-table, the range-hashing scheme
- affects performance more than other policies; <a href="hash_text_find_find_timing_test.html#observations">Hash-Based
- Text <tt>find</tt> Find Timing Test::Observations</a> discusses
- this. In Figures <a href="#NCCG">NCCG</a> , <a href="#NCCM">NCCM</a> , <a href="#NGPG">NGPG</a> , and <a href="#NGPM">NGPM</a> , it should be noted that
- <tt>std::tr1::unordered_map</tt> and <tt>stdext::hash_map</tt>
- are hard-wired currently to mod-based and mask-based schemes,
- respectively.</p>
-<p><a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> summarizes some observations on hash-based
- containers; <a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Random Int Subscript Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Random-Integer <tt><b>operator</b>[]</tt>
- FindTiming Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with uniform i.i.d.
- integer keys into a container, then performs a series of finds
- using <tt><b>operator</b>[]</tt>. It measures the average time
- for <tt><b>operator</b>[]</tt> as a function of the number of
- values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/random_int_subscript_find_timing.cc"><tt>hash_random_int_subscript_find_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- hash-tables (see <a href="hash_based_containers.html">Design::Hash-Based Containers</a>
- ), range-hashing functions, and trigger policies (see <a href="hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a> and <a href="hash_based_containers.html#resize_policies">Design::Hash-Based
- Containers::Resize Policies</a> ).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>,
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NGPG">NGPG</a>, <a href="#NGPM">NGPM</a>, and <a href="#NGPL">NGPL</a> show the results
- for the native and probing types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_cc_hash_random_int_subscript_timing_test_find">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="cc_hash_random_int_subscript_timing_test_find_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_cc_hash_random_int_subscript_timing_test_find">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="cc_hash_random_int_subscript_timing_test_find_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_cc_hash_random_int_subscript_timing_test_find">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="cc_hash_random_int_subscript_timing_test_find_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash random int find timing test using <tt><b>operator</b></tt>[] - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPG_res_div">
-<div id="NGPG_gcc">
-<div id="NGPG_gp_hash_random_int_subscript_timing_test_find">
-<div id="NGPG_assoc">
-<div id="NGPG_Native_and_probing_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPG" id="NGPG"><img src="gp_hash_random_int_subscript_timing_test_find_gcc.png" alt="no image" /></a></h6>NGPG: Native and probing hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPM_res_div">
-<div id="NGPM_msvc">
-<div id="NGPM_gp_hash_random_int_subscript_timing_test_find">
-<div id="NGPM_assoc">
-<div id="NGPM_Native_and_probing_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPM" id="NGPM"><img src="gp_hash_random_int_subscript_timing_test_find_msvc.png" alt="no image" /></a></h6>NGPM: Native and probing hash random int find timing test using <tt><b>operator</b></tt>[] - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPL_res_div">
-<div id="NGPL_local">
-<div id="NGPL_gp_hash_random_int_subscript_timing_test_find">
-<div id="NGPL_assoc">
-<div id="NGPL_Native_and_probing_hash_random_int_find_timing_test_using__tt__b_operator_455b__455tt__457"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPL" id= "NGPL"><img src="gp_hash_random_int_subscript_timing_test_find_local.png" alt="no image" /></a></h6>NGPL: Native and probing hash random int find timing test using <tt><b>operator</b></tt>[] - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>This test shows similar results to <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a> .</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Random Int Subscript Insert Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Random-Integer <tt><b>operator</b>[]</tt> Insert
- Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with uniform i.i.d.
- integer keys into a container, using
- <tt><b>operator</b>[]</tt>. It measures the average time for
- <tt><b>operator</b>[]</tt> as a function of the number of
- values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/random_int_subscript_insert_timing.cc"><tt>hash_random_int_subscript_insert_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test primarily checks the effect of different underlying
- hash-tables (see <a href="hash_based_containers.html">Design::Associative
- Containers::Associative Containers::Hash-Based
- Containers</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>,
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NGPG">NGPG</a>, <a href="#NGPM">NGPM</a>, and <a href="#NGPL">NGPL</a> show the results
- for the native and probing types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>
- respectively; Figures <a href="#CCGPG">CCGPG</a>, <a href="#CCGPM">CCGPM</a>, and <a href="#CCGPL">CCGPL</a> compare the
- results for the collision-chaining and probing types of
- <tt>pb_ds</tt> only, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>
- respectively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_cc_hash_random_int_subscript_timing_test_insert">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="cc_hash_random_int_subscript_timing_test_insert_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_cc_hash_random_int_subscript_timing_test_insert">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="cc_hash_random_int_subscript_timing_test_insert_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_cc_hash_random_int_subscript_timing_test_insert">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="cc_hash_random_int_subscript_timing_test_insert_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash random int insert timing test using <tt><b>operator</b></tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPG_res_div">
-<div id="NGPG_gcc">
-<div id="NGPG_gp_hash_random_int_subscript_timing_test_insert">
-<div id="NGPG_assoc">
-<div id="NGPG_Native_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPG" id="NGPG"><img src="gp_hash_random_int_subscript_timing_test_insert_gcc.png" alt="no image" /></a></h6>NGPG: Native and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPM_res_div">
-<div id="NGPM_msvc">
-<div id="NGPM_gp_hash_random_int_subscript_timing_test_insert">
-<div id="NGPM_assoc">
-<div id="NGPM_Native_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPM" id="NGPM"><img src="gp_hash_random_int_subscript_timing_test_insert_msvc.png" alt="no image" /></a></h6>NGPM: Native and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NGPL_res_div">
-<div id="NGPL_local">
-<div id="NGPL_gp_hash_random_int_subscript_timing_test_insert">
-<div id="NGPL_assoc">
-<div id="NGPL_Native_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NGPL" id= "NGPL"><img src="gp_hash_random_int_subscript_timing_test_insert_local.png" alt="no image" /></a></h6>NGPL: Native and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="CCGPG_res_div">
-<div id="CCGPG_gcc">
-<div id="CCGPG_ccgp_hash_random_int_subscript_timing_test_insert">
-<div id="CCGPG_assoc">
-<div id="CCGPG_Collision-chaining_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="CCGPG" id="CCGPG"><img src="ccgp_hash_random_int_subscript_timing_test_insert_gcc.png" alt="no image" /></a></h6>CCGPG: Collision-chaining and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="CCGPM_res_div">
-<div id="CCGPM_msvc">
-<div id="CCGPM_ccgp_hash_random_int_subscript_timing_test_insert">
-<div id="CCGPM_assoc">
-<div id="CCGPM_Collision-chaining_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="CCGPM" id="CCGPM"><img src="ccgp_hash_random_int_subscript_timing_test_insert_msvc.png" alt="no image" /></a></h6>CCGPM: Collision-chaining and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="linear_probe_fn.html"><tt>linear_probe_fn</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="CCGPL_res_div">
-<div id="CCGPL_local">
-<div id="CCGPL_ccgp_hash_random_int_subscript_timing_test_insert">
-<div id="CCGPL_assoc">
-<div id="CCGPL_Collision-chaining_and_probing_hash_random_int_insert_timing_test_using__tt__b_operator_455b__455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="CCGPL" id= "CCGPL"><img src="ccgp_hash_random_int_subscript_timing_test_insert_local.png" alt="no image" /></a></h6>CCGPL: Collision-chaining and probing hash random int insert timing test using <tt><b>operator</b></tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, as in <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a> and <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a> , the choice
- of underlying hash-table underlying hash-table (see <a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a> ) affects performance
- most, then the range-hashing scheme (See <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> ), and,
- only finally, other policies.</p>
-<p>There are some differences, however:</p>
-<ol>
-<li>In this setting, probing tables function sometimes more
- efficiently than collision-chaining tables (see Figures
- <a href="#CCGPG">CCGPG</a> and <a href="#CCGPM">CCGPM</a> ).
- This is explained shortly.</li>
-<li>The performance graphs have a "saw-tooth" shape. The
- average insert time rises and falls. As values are inserted
- into the container, the load factor grows larger. Eventually,
- a resize occurs. The reallocations and rehashing are
- relatively expensive. After this, the load factor is smaller
- than before.</li>
-</ol>
-<p>Collision-chaining containers use indirection for greater
- flexibility; probing containers store values contiguously, in
- an array (see Figure <a href="motivation.html#different_underlying_data_structures">Motivation::Different
- underlying data structures</a> A and B, respectively). It
- follows that for simple data types, probing containers access
- their allocator less frequently than collision-chaining
- containers, (although they still have less efficient probing
- sequences). This explains why some probing containers fare
- better than collision-chaining containers in this case.</p>
-<p>Within each type of hash-table, the range-hashing scheme
- affects performance more than other policies. This is similar
- to the situation in <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a> and <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a>.
- Unsurprisingly, however, containers with <u>lower</u>
-<i>alpha<sub>max</sub></i> perform <u>worse</u> in this case,
- since more re-hashes are performed.</p>
-<p><a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> summarizes some observations on hash-based
- containers; <a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>hash_standard_resize_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>hash_standard_resize_policy</tt> Interface</h1>
-
- <p>A resize policy which delegates operations to size and
- trigger policies.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Policy1072992366" id=
-"Size_Policy1072992366"><b>class</b> Size_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Size policy type.</p>
- </td>
-
- <td><a href=
- "hash_exponential_size_policy.html"><span class="c2"><tt>hash_exponential_size_policy</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Trigger_Policy3611271815" id=
-"Trigger_Policy3611271815"><b>class</b> Trigger_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Trigger policy type.</p>
- </td>
-
- <td><a href=
- "hash_load_check_resize_trigger.html"><span class=
- "c2"><tt>hash_load_check_resize_trigger</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="External_Size_Access1380482982" id=
-"External_Size_Access1380482982"><b>bool</b> External_Size_Access </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether physical sizes can be accessed
- externally.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="trigger_policy4019166151" id=
-"trigger_policy4019166151">trigger_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Trigger policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_policy1385592366" id=
-"size_policy1385592366">size_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="external_size_access4043083014" id=
-"external_size_access4043083014">external_size_access</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#External_Size_Access1380482982"><tt>External_Size_Access</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether sizes can be accessed
- externally.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_standard_resize_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_standard_resize_policy
- (<b>const</b> <a href=
-"#Size_Policy1072992366"><tt>Size_Policy</tt></a> &r_size_policy)
-</pre>
- </td>
-
- <td>
- <p>constructor taking some policies <span class=
- "c1"><tt>r_size_policy</tt></span> will be copied by the
- <a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
- object of this object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- hash_standard_resize_policy
- (<b>const</b> <a href=
-"#Size_Policy1072992366"><tt>Size_Policy</tt></a> &r_size_policy,
- <b>const</b> <a href=
-"#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a> &r_trigger_policy)
-</pre>
- </td>
-
- <td>
- <p>constructor taking some policies. <span class=
- "c1"><tt>r_size_policy</tt></span> will be copied by the
- <a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a>
- object of this object. <span class=
- "c1"><tt>r_trigger_policy</tt></span> will be copied by
- the <a href=
- "#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
- object of this object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~hash_standard_resize_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (<span class=
-"c2"><tt>hash_standard_resize_policy</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#Size_Policy1072992366"><tt>Size_Policy</tt></a> &
- get_size_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#Size_Policy1072992366"><tt>Size_Policy</tt></a> object
- used.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#Size_Policy1072992366"><tt>Size_Policy</tt></a> &
- get_size_policy
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#Size_Policy1072992366"><tt>Size_Policy</tt></a> object
- used.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a> &
- get_trigger_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
- object used.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href=
-"#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a> &
- get_trigger_policy
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#Trigger_Policy3611271815"><tt>Trigger_Policy</tt></a>
- object used.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Size Access Methods</a></h3>
-
- <p>These methods are available only if the external size
- parameter indicates that external size access is allowed.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- get_actual_size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the actual size of the container.</p>
-
- <p>This method returns the number of entries (used and
- unused) in the container. It is different from the
- container's size method, which returns the number of used
- entries. Calling this method will not compile when
- <a href=
- "#External_Size_Access1380482982"><tt>External_Size_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- resize
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> suggested_new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes the container to <span class=
- "c1"><tt>suggested_new_size</tt></span>, a suggested size
- (the actual size will be determined by the <a href=
- "#Size_Policy1072992366"><tt>Size_Policy</tt></a>
- object).</p>
-
- <p>Calling this method will not compile when <a href=
- "#External_Size_Access1380482982"><tt>External_Size_Access</tt></a>
- == <tt><b>false</b></tt>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Methods</a></h2>
-
- <h3><a name="link11" id="link11">Insert Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Find Search
- Notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Erase Search
- Notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Content Change
- Notifications</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link15" id="link15">Size Change
- Notifications</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link16" id="link16">Queries</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_new_size
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_used_e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries what the new <span class=
- "c1"><tt>size</tt></span> should be, when the container
- is resized naturally. The current size of the container
- is <span class="c1"><tt>size</tt></span>, and the number
- of used entries within the container is <span class=
- "c1"><tt>num_used_e</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link17" id="link17">Private Methods</a></h2>
-
- <h3><a name="link18" id="link18">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>void</b>
- do_resize
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Text Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Text <tt>find</tt> Find Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container, then performs a series of finds using
- <tt>find</tt> . It measures the average time for <tt>find</tt>
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc"><tt>text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different range-hashing
- functions, trigger policies, and cache-hashing policies (see
- <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Associative Containers::Hash-Based Containers::Hash
- Policies</a> and <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a> ).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NCCG">NCCG</a>, <a href="#NCCM">NCCM</a>
- and <a href="#NCCL">NCCL</a> show the results for the native
- and collision-chaining types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respetively.</p>
-<div id="NCCG_res_div">
-<div id="NCCG_gcc">
-<div id="NCCG_text_find_timing_test_hash">
-<div id="NCCG_assoc">
-<div id="NCCG_Native_and_collision-chaining_hash_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCG" id="NCCG"><img src="text_find_timing_test_hash_gcc.png" alt="no image" /></a></h6>NCCG: Native and collision-chaining hash text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCM_res_div">
-<div id="NCCM_msvc">
-<div id="NCCM_text_find_timing_test_hash">
-<div id="NCCM_assoc">
-<div id="NCCM_Native_and_collision-chaining_hash_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCM" id="NCCM"><img src="text_find_timing_test_hash_msvc.png" alt="no image" /></a></h6>NCCM: Native and collision-chaining hash text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NCCL_res_div">
-<div id="NCCL_local">
-<div id="NCCL_text_find_timing_test_hash">
-<div id="NCCL_assoc">
-<div id="NCCL_Native_and_collision-chaining_hash_text_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NCCL" id= "NCCL"><img src="text_find_timing_test_hash_local.png" alt="no image" /></a></h6>NCCL: Native and collision-chaining hash text find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, the range-hashing scheme (See <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> ) affects
- performance more than other policies. As Figure <a href="#NCCG">NCCG</a> shows, containers using mod-based
- range-hashing (including the native hash-based container, which
- is currently hard-wired to this scheme) have lower performance
- than those using mask-based range-hashing. A modulo-based
- range-hashing scheme's main benefit is that it takes into
- account all hash-value bits. Standard string hash-functions are
- designed to create hash values that are nearly-uniform as is [
- <a href="references.html#knuth98sorting">knuth98sorting</a>
- ].</p>
-<p>Trigger policies (see <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a> ),
- <i>i.e.</i> the load-checks constants, affect performance to a
- lesser extent.</p>
-<p>Perhaps surprisingly, storing the hash value alongside each
- entry affects performance only marginally, at least in
- <tt>pb_ds</tt> 's implementation. (Unfortunately, it was not
- possible to run the tests with <tt>std::tr1::unordered_map</tt>
- 's <tt>cache_hash_code = <b>true</b></tt> , as it appeared to
- malfuntion.)</p>
-<p><a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash Skewed Distribution Memory Use Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Hash-Based Skewed-Distribution Random-Integer <tt>find</tt>
- Find Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with a markedly
- non-uniform i.i.d. integer keys into a container, then performs
- a series of finds using <tt>find</tt> . It measures the average
- time for <tt>find</tt> as a function of the number of values in
- the containers. The keys are generated as follows. First, a
- uniform integer is created; it is then shifted left 8 bits.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc"><tt>hash_zlob_random_int_find_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different range-hashing
- functions and trigger policies (see <a href="hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a> and
- <a href="hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NHG">NHG</a>, <a href="#NHM">NHM</a>, and
- <a href="#NHL">NHL</a> show the results for various hash-based
- associative-containers in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>MSVC++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_hash_zlob_random_int_find_timing_test">
-<div id="NHG_assoc">
-<div id="NHG_Skewed-distribution_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="hash_zlob_random_int_find_timing_test_gcc.png" alt="no image" /></a></h6>NHG: Skewed-distribution random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-n_hash_map_ncah-
-<tt>std::tr1::unordered_map</tt> with <tt>cache_hash_code</tt> = <tt><b>false</b></tt></li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_hash_zlob_random_int_find_timing_test">
-<div id="NHM_assoc">
-<div id="NHM_Skewed-distribution_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="hash_zlob_random_int_find_timing_test_msvc.png" alt="no image" /></a></h6>NHM: Skewed-distribution random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_map_ncah-
-<tt>stdext::hash_map</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-<li>
-gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map-
-<a href="gp_hash_table.html"><tt>gp_hash_table</tt></a>
- with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, and <tt>Probe_Fn</tt> = <a href="quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>
-</li>
-<li>
-cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/1</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_hash_zlob_random_int_find_timing_test">
-<div id="NHL_assoc">
-<div id="NHL_Skewed-distribution_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="hash_zlob_random_int_find_timing_test_local.png" alt="no image" /></a></h6>NHL: Skewed-distribution random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this setting, the keys' distribution is so skewed that
- the unerlying hash-table type affects performance marginally.
- (This is in contrast with <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a> , <a href="hash_random_int_find_find_timing_test.html">Hash-Based
- Random-Integer <tt>find</tt> Find Timing Test</a> , <a href="hash_random_int_subscript_find_timing_test.html">Hash-Based
- Random-Integer Subscript Find Timing Test</a> and <a href="hash_random_int_subscript_insert_timing_test.html">Hash-Based
- Random-Integer Subscript Insert Timing Test</a> .)</p>
-<p>The range-hashing scheme affects performance dramatically. A
- mask-based range-hashing scheme effectively maps all values
- into the same bucket. Access degenerates into a search within
- an unordered linked-list. In Figures <a href="#NHG">NHG</a> and
- <a href="#NHM">NHM</a> , it should be noted that
- <tt>std::tr1::unordered_map</tt> and <tt>stdext::hash_map</tt>
- are hard-wired currently to mod-based and mask-based schemes,
- respectively.</p>
-<p>When observing the settings of this test, it is apparent
- that the keys' distribution is far from natural. One might ask
- if the test is not contrived to show that, in some cases,
- mod-based range hashing does better than mask-based range
- hashing. This is, in fact just the case. We did not encounter a
- more natural case in which mod-based range hashing is better.
- In our opnion, real-life key distributions are handled better
- with an appropriate hash function and a mask-based
- range-hashing function. (<a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/hash_shift_mask.cc"><tt>shift_mask.cc</tt></a>
- shows an example of handling this a-priori known skewed
- distribution with a mask-based range-hashing function). If hash
- performance is bad, a <i>Χ<sup>2</sup></i> test can be used
- to check how to transform it into a more uniform
- distribution.</p>
-<p>For this reason, <tt>pb_ds</tt>'s default range-hashing
- function is mask-based.</p>
-<p><a href="assoc_performance_tests.html#hash_based_types">Observations::Hash-Based
- Container Types</a> summarizes some observations on hash-based
- containers; <a href="assoc_performance_tests.html#hash_based_policies">Observations::Hash-Based
- Containers' Policies</a> summarizes some observations on
- hash-based containers' policies.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Policy-Based Data Structures</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Policy-Based Data Structures</h1>
-
- <h5>Ami Tavory and Vladimir Dreizin, IBM Haifa Research
- Laboratories, and Benjamin Kosnik, Red Hat</h5>
-
- <h5><a href="mailto:pbassoc@gmail.com">pbassoc@gmail.com</a></h5>
-
- <p>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 <tt>std</tt>
- and std::tr1 (except for some points where it differs by
- design).</p>
-
- <p>The documentation is organized as follows:</p>
-
- <ol>
- <li>
- <a href="introduction.html">Introductory</a>
-
- <ol>
- <li><a href="introduction.html">Introduction</a></li>
-
- <li><a href="motivation.html">Motivation</a></li>
-
- <li><a href="prerequisites.html">Usage
- Prerequisites</a></li>
- </ol>
- </li>
-
- <li>
- <a href="interface.html">Interface</a>
-
- <ol>
- <li><a href="tutorial.html">Short Tutorial</a></li>
-
- <li><a href="concepts.html">Concepts</a></li>
-
- <li><a href="interface.html">Specifics</a></li>
- </ol>
- </li>
-
- <li>
- <a href="design.html">Design</a>
-
- <ol>
- <li>
- <a href="assoc_design.html">Associative Containers</a>
-
- <ol>
- <li><a href="ds_gen.html">Data-Structure
- Genericity and Interface</a> </li>
-
- <li><a href="tree_based_containers.html">Tree-Based
- Containers</a></li>
-
- <li><a href="trie_based_containers.html">Trie-Based
- Containers</a></li>
-
- <li><a href="hash_based_containers.html">Hash-Based
- Containers</a></li>
-
- <li><a href="lu_based_containers.html">List-Based
- Containers</a> </li>
- </ol>
- </li>
-
- <li><a href="pq_design.html">Priority Queues</a></li>
- </ol>
- </li>
-
- <li>
- <a href="examples.html">Examples</a>
-
- <ol>
- <li><a href="assoc_examples.html">Associative
- Containers</a></li>
-
- <li><a href="pq_examples.html">Priority Queues</a></li>
- </ol>
- </li>
-
- <li>
- <a href="tests.html">Tests</a>
-
- <ol>
- <li>
- <a href="assoc_tests.html">Associative Containers</a>
-
- <ol>
- <li><a href="assoc_regression_tests.html">Regression
- Tests</a></li>
-
- <li><a href=
- "assoc_performance_tests.html">Performance
- Tests</a></li>
- </ol>
- </li>
-
- <li>
- <a href="pq_tests.html">Priority Queues</a>
-
- <ol>
- <li><a href="pq_regression_tests.html">Regression
- Tests</a></li>
-
- <li><a href="pq_performance_tests.html">Performance
- Tests</a></li>
- </ol>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="misc.html">Misc.</a>
-
- <ol>
- <li><a href="acks.html">Acknowledgments</a></li>
-
- <li><a href="contact.html">Contact</a></li>
-
- <li><a href="disclaimer.html">Disclaimer and
- Copyright</a></li>
-
- <li><a href="references.html">References</a></li>
- </ol>
- </li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
-<title>insert_error Interface</title>
-<meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-</head>
-
-<body>
-<div id="page">
-<h1><tt>insert_error</tt> Interface</h1>
-
-<p>An entry cannot be inserted into a container object for logical
-reasons (not, e.g., if memory is unavailable, in which case the
-allocator's exception will be thrown).</p>
-
- <p>This exception may be thrown, e.g., when a probe sequence in
- a probing hash table does not encounter any free positions,
- even though free positions are available.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/exception.hpp"><tt>exception.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="exceptions.html"><span class=
-"c2"><tt>insert_error</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
-<title>Interface</title>
-<meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-</head>
-
-<body>
-<div id="page">
-<h1>Interface Specifics</h1>
-
-<p>Following are the library's interface specifics. <a href=
- "tutorial.html">Short Tutorial</a> is a short tutorial, and
- <a href="concepts.html">Concepts</a> describes some
- concepts.</p>
- <hr />
-
- <h2><a name="namespaces" id="namespaces">Namespace</a></h2>
-
- <p>All code is enclosed in namespace <tt>pb_ds</tt>. Nested within
- this is namespace <tt>detail</tt>, which contains the parts of this
- library that are considered implementation details.</p>
- <hr />
-
- <h2><a name="containers" id="containers">Containers</a></h2>
-
- <h3><a name="containers_assoc" id=
- "containers_assoc">Associative Containers</a></h3>
-
- <ol>
- <li><a href=
- "container_base.html"><tt>container_base</tt></a> -
- abstract base class for associative containers.</li>
-
- <li>Hash-based:
-
- <ol>
- <li><a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- - abstract base class for hash-based
- containers</li>
-
- <li><a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a>
- - concrete collision-chaining hash-based
- containers</li>
-
- <li><a href=
- "gp_hash_table.html"><tt>gp_hash_table</tt></a>
- - concrete (general) probing hash-based
- containers</li>
- </ol>
- </li>
-
- <li>Tree-based:
-
- <ol>
- <li><a href=
- "basic_tree.html"><tt>basic_tree</tt></a>
- - abstract base class for tree and trie based
- containers</li>
-
- <li><a href=
- "tree.html"><tt>tree</tt></a>
- - concrete base class for tree-based
- containers</li>
-
- <li><a href=
- "trie.html"><tt>trie</tt></a>
- - concrete base class for trie-based
- containers</li>
- </ol>
- </li>
-
- <li>List-based:
-
- <ol>
- <li><a href=
- "list_update.html"><tt>list_update</tt></a> -
- singly-linked list with update-policy container</li>
- </ol>
- </li>
- </ol>
-
- <h3><a name="containers_pq" id="containers_pq">Priority
- Queues</a></h3>
-
- <ol>
- <li><a href="priority_queue.html"><tt>priority_queue</tt></a>
- - priority queue</li>
- </ol>
- <hr />
-
- <h2><a name="tag" id="tag">Container Tags and
- Traits</a></h2>
-
- <h3><a name="ds_ts" id="ds_ts">Container Tags</a></h3>
-
- <h4><a name="ds_ts_common" id="ds_ts_common">Common</a></h4>
-
- <ol>
- <li><a href="container_tag.html"><tt>container_tag</tt></a> -
- base class for data structure tags</li>
- </ol>
-
- <h4><a name="ds_ts_assoc" id=
- "ds_ts_assoc">Associative-Containers</a></h4>
-
- <ol>
- <li><a href=
- "associative_container_tag.html"><tt>associative_container_tag</tt></a> -
- base class for associative-container data structure tags</li>
-
- <li><a href=
- "basic_hash_tag.html"><tt>basic_hash_tag</tt></a> -
- base class for hash-based structure tags</li>
-
- <li><a href="cc_hash_tag.html"><tt>cc_hash_tag</tt></a>
- - collision-chaining hash structure tag</li>
-
- <li><a href="gp_hash_tag.html"><tt>gp_hash_tag</tt></a>
- - (general) probing hash structure tag</li>
-
- <li><a href=
- "basic_tree_tag.html"><tt>basic_tree_tag</tt></a>
- - base class for tree-like structure tags</li>
-
- <li><a href=
- "tree_tag.html"><tt>tree_tag</tt></a> -
- base class for tree structure tags</li>
-
- <li><a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
- - red-black tree structure tag/li></li>
-
- <li><a href=
- "splay_tree_tag.html"><tt>splay_tree_tag</tt></a> -
- splay tree structure tag</li>
-
- <li><a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
- - ordered-vector tree structure tag</li>
-
- <li><a href=
- "trie_tag.html"><tt>trie_tag</tt></a> -
- trie structure tag</li>
-
- <li><a href=
- "pat_trie_tag.html"><tt>pat_trie_tag</tt></a> -
- PATRICIA trie structure tag</li>
-
- <li><a href="list_update_tag.html"><tt>list_update_tag</tt></a> - list
- (with updates) structure tag</li>
- </ol>
-
- <h4><a name="ds_ts_pq" id="ds_ts_pq">Priority-Queues</a></h4>
-
- <ol>
- <li><a href=
- "priority_queue_tag.html"><tt>priority_queue_tag</tt></a> - base
- class for priority-queue data structure tags</li>
-
- <li><a href=
- "pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a> -
- pairing-heap structure tag.</li>
-
- <li><a href=
- "binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
- - binomial-heap structure tag</li>
-
- <li><a href=
- "rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
- - redundant-counter binomial-heap (<i>i.e.</i>, a heap where
- binomial trees form a sequence that is similar to a
- de-amortized bit-addition algorithm) structure tag</li>
-
- <li><a href=
- "binary_heap_tag.html"><tt>binary_heap_tag</tt></a> -
- binary heap (based on an array or an array of nodes)
- structure tag</li>
-
- <li><a href=
- "thin_heap_tag.html"><tt>thin_heap_tag</tt></a> - thin
- heap (an alternative [<a href=
- "references.html#kt99fat_heaps">kt99fat_heaps</a>] to
- Fibonacci heap) data structure tag.</li>
- </ol>
-
- <h3><a name="ds_inv_tag" id="ds_inv_tag">Invalidation-Guarantee
- Tags</a></h3>
-
- <ol>
- <li><a href=
- "basic_invalidation_guarantee.html"><tt>basic_invalidation_guarantee</tt></a>
- - weakest invalidation guarantee</li>
-
- <li><a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>
- - stronger invalidation guarantee</li>
-
- <li><a href=
- "range_invalidation_guarantee.html"><tt>range_invalidation_guarantee</tt></a>
- - strongest invalidation guarantee</li>
- </ol>
-
- <h3><a name="container_traits" id="container_traits">Container
- Traits</a></h3>
-
- <ol>
- <li><a href="pq_container_traits.html"><tt>container_traits</tt></a> -
- traits for determining underlying data structure
- properties</li>
- </ol>
- <hr />
-
- <h2><a name="ds_policy_classes" id=
- "ds_policy_classes">Container Policy Classes</a></h2>
-
- <h3><a name="hash_related_policies" id=
- "hash_related_policies">Hash Policies</a></h3>
-
- <h4>Hash and Probe Policies</h4>
-
- <ol>
- <li>Hash Functions:
-
- <ol>
- <li><a href="null_hash_fn.html"><tt>null_hash_fn</tt></a>
- - type indicating one-step range-hashing</li>
- </ol>
- </li>
-
- <li>Range-Hashing Functions:
-
- <ol>
- <li><a href="sample_range_hashing.html">Sample
- range-hashing function</a> - interface required of a
- range-hashing functor</li>
-
- <li><a href=
- "direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
- - (bit) mask-based range hashing functor</li>
-
- <li><a href=
- "direct_mod_range_hashing.html"><tt>direct_mod_range_hashing</tt></a>
- - modulo-based range hashing functor</li>
- </ol>
- </li>
-
- <li>Probe Functions:
-
- <ol>
- <li><a href="sample_probe_fn.html">Sample probe
- function</a> - interface required of a probe functor</li>
-
- <li><a href=
- "null_probe_fn.html"><tt>null_probe_fn</tt></a> - type
- indicating one-step ranged-probe</li>
-
- <li><a href=
- "linear_probe_fn.html"><tt>linear_probe_fn</tt></a> -
- linear-probe functor</li>
-
- <li><a href=
- "quadratic_probe_fn.html"><tt>quadratic_probe_fn</tt></a>-
- quadratic-probe functor</li>
- </ol>
- </li>
-
- <li>Ranged-Hash Functions:
-
- <ol>
- <li><a href="sample_ranged_hash_fn.html">Sample
- ranged-hash function</a> - interface required of a
- ranged-hash functor</li>
- </ol>
- </li>
-
- <li>Ranged-Probe Functions:
-
- <ol>
- <li><a href="sample_ranged_probe_fn.html">Sample
- ranged-probe function</a> - interface required of a
- ranged-probe functor</li>
- </ol>
- </li>
- </ol>
-
- <h4>Resize Policies</h4>
- <ol>
- <li>Resize Policies:
-
- <ol>
- <li><a href="sample_resize_policy.html">Sample resize
- policy</a> - interface required of a resize policy</li>
-
- <li><a href=
- "hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- - standard resize policy</li>
- </ol>
- </li>
-
- <li>Size Policies:
-
- <ol>
- <li><a href="sample_size_policy.html">Sample size
- policy</a> - interface required of a size policy</li>
-
- <li><a href=
- "hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
- - exponential size policy (typically used with (bit) mask
- range-hashing)</li>
-
- <li><a href=
- "hash_prime_size_policy.html"><tt>hash_prime_size_policy</tt></a>
- - prime size policy (typically used with modulo
- range-hashing)</li>
- </ol>
- </li>
-
- <li>Trigger Policies:
-
- <ol>
- <li><a href="sample_resize_trigger.html">Sample trigger
- policy</a> - interface required of a trigger policy</li>
-
- <li><a href=
- "hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- - trigger policy based on load checks</li>
-
- <li><a href=
- "cc_hash_max_collision_check_resize_trigger.html"><tt>cc_hash_max_collision_check_resize_trigger</tt></a>
- - trigger policy based on collision checks</li>
- </ol>
- </li>
- </ol>
-
- <h3><a name="tree_related_policies" id=
- "tree_related_policies">Tree Policies</a></h3>
-
- <h4>Tree Node-Update Policies</h4>
-
-
-<ol>
-<li><a href="sample_tree_node_update.html">Sample node
-updater policy</a> - interface required of a tree
-node-updating functor</li>
-
-<li><a href=
- "null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-- null policy indicating no updates are required</li>
-
-<li><a href=
- "tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-- updater enabling order statistics queries</li>
-</ol>
-
-<h3><a name="trie_related_policies" id=
- "trie_related_policies">Trie Policies</a></h3>
-
-
-<h4>Trie Element-Access Traits</h4>
-
- <ol>
- <li><a href="sample_trie_e_access_traits.html">Sample
- element-access traits</a> - interface required of
- element-access traits</li>
-
- <li><a href=
- "string_trie_e_access_traits.html"><tt>string_trie_e_access_traits</tt></a>
- - String element-access traits</li>
- </ol>
-
- <h4>Trie Node-Update Policies</h4>
-
-
-<ol>
-<li><a href="sample_trie_node_update.html">Sample node
-updater policy</a> - interface required of a trie node
-updater</li>
-
-<li><a href=
- "null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-- null policy indicating no updates are required</li>
-
-<li><a href=
- "trie_prefix_search_node_update.html"><tt>trie_prefix_search_node_update</tt></a>
-- updater enabling prefix searches</li>
-
-<li><a href=
- "trie_order_statistics_node_update.html"><tt>trie_order_statistics_node_update</tt></a>
-- updater enabling order statistics queries</li>
-</ol>
-
-<h3><a name="list_related_policies" id=
- "list_related_policies">List Policies</a></h3>
-
-<h4>List Update Policies</h4>
-
-
- <ol>
- <li><a href="sample_update_policy.html">Sample list update
- policy</a> - interface required of a list update policy</li>
-
- <li><a href=
- "move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
- - move-to-front update algorithm</li>
-
- <li><a href=
- "counter_lu_policy.html"><tt>counter_lu_policy</tt></a> -
- counter update algorithm</li>
- </ol>
-
- <h3><a name="ds_pol" id="ds_pol">Mapped-Type Policies</a></h3>
-
-
- <ol>
- <li><a href=
- "null_mapped_type.html"><tt>null_mapped_type</tt></a> - data
- policy indicating that a container is a "set"</li>
- </ol>
- <hr />
-
- <h2><a name="exceptions" id="exceptions">Exceptions</a></h2>
-
-
- <ol>
- <li><a href="exceptions.html"><tt>container_error</tt></a>
- - base class for all policy-based data structure errors</li>
-
- <li><a href=
- "insert_error.html"><tt>insert_error</tt></a></li>
-
- <li><a href="join_error.html"><tt>join_error</tt></a></li>
-
- <li><a href=
- "resize_error.html"><tt>resize_error</tt></a></li>
- </ol>
-
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Introduction</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Introduction</h1>
-
- <p>This section describes what problems the library attempts to
- solve. <a href="motivation.html">Motivation</a> describes the
- reasons we think it solves these problems better than similar
- libraries.</p>
-
- <h2><a name="assoc" id="assoc">Associative Containers</a></h2>
-
- <ol>
- <li>Associative containers depend on their policies to a very
- large extent. Implicitly hard-wiring policies can hamper their
- performance and limit their functionality. An efficient
- hash-based container, for example, requires policies for
- testing key equivalence, hashing keys, translating hash
- values into positions within the hash table, and determining
- when and how to resize the table internally. A tree-based
- container can efficiently support order statistics,
- <i>i.e.</i>, the ability to query what is the order of each
- key within the sequence of keys in the container, but only if
- the container is supplied with a policy to internally update
- meta-data. There are many other such examples.<p></p></li>
-
- <li>Ideally, all associative containers would share the same
- interface. Unfortunately, underlying data structures and
- mapping semantics differentiate between different containers.
- For example, suppose one writes a generic function
- manipulating an associative container <tt>Cntnr</tt>:
- <pre>
-template<typename Cntnr>
- void
- some_op_sequence(Cntnr& r_cnt)
- {
- ...
- }
-</pre>
-
-then what can one assume about <tt>Cntnr</tt>? The answer
-varies according to its underlying data structure. If the
-underlying data structure of <tt>Cntnr</tt> is based on a tree or
-trie, then the order of elements is well defined; otherwise, it is
-not, in general. If the underlying data structure of <tt>Cntnr</tt>
-is based on a collision-chaining hash table, then modifying
-r_<tt>Cntnr</tt> will not invalidate its iterators' order; if the
-underlying data structure is a probing hash table, then this is not
-the case. If the underlying data structure is based on a tree or
-trie, then <tt>r_cnt</tt> can efficiently be split; otherwise, it
-cannot, in general. If the underlying data structure is a red-black
-tree, then splitting <tt>r_cnt</tt> is exception-free; if it is an
-ordered-vector tree, exceptions can be thrown.
- <p></p></li>
- </ol>
-
- <h2><a name="pq" id="pq">Priority Queues</a></h2>
-
- <p>Priority queues are useful when one needs to efficiently
- access a minimum (or maximum) value as the set of values
- changes.</p>
-
- <ol>
- <li>Most useful data structures for priority queues have a
- relatively simple structure, as they are geared toward
- relatively simple requirements. Unfortunately, these structures
- do not support access to an arbitrary value, which turns out to
- be necessary in many algorithms. Say, decreasing an arbitrary
- value in a graph algorithm. Therefore, some extra mechanism is
- necessary and must be invented for accessing arbitrary
- values. There are at least two alternatives: embedding an
- associative container in a priority queue, or allowing
- cross-referencing through iterators. The first solution adds
- significant overhead; the second solution requires a precise
- definition of iterator invalidation. Which is the next
- point...<p></p></li>
-
- <li>Priority queues, like hash-based containers, store values in
- an order that is meaningless and undefined externally. For
- example, a <tt>push</tt> operation can internally reorganize the
- values. Because of this characteristic, describing a priority
- queues' iterator is difficult: on one hand, the values to which
- iterators point can remain valid, but on the other, the logical
- order of iterators can change unpredictably.<p></p></li>
-
- <li>Roughly speaking, any element that is both inserted to a
- priority queue (<i>e.g.</i>, through <tt>push</tt>) and removed
- from it (<i>e.g.</i>, through <tt>pop</tt>), incurs a
- logarithmic overhead (in the amortized sense). Different
- underlying data structures place the actual cost differently:
- some are optimized for amortized complexity, whereas others
- guarantee that specific operations only have a constant
- cost. One underlying data structure might be chosen if modifying
- a value is frequent (Dijkstra's shortest-path algorithm),
- whereas a different one might be chosen
- otherwise. Unfortunately, an array-based binary heap - an
- underlying data structure that optimizes (in the amortized
- sense) <tt>push</tt> and <tt>pop</tt> operations, differs from
- the others in terms of its invalidation guarantees. Other design
- decisions also impact the cost and placement of the overhead, at
- the expense of more difference in the the kinds of operations
- that the underlying data structure can support. These
- differences pose a challenge when creating a uniform interface
- for priority queues.<p></p></li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
-<title>join_error Interface</title>
-<meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-</head>
-
-<body>
-<div id="page">
-<h1><tt>join_error</tt> Interface</h1>
-
-<p>A join cannot be performed logical reasons (i.e., the ranges of the
- two container objects
- being joined
- overlaps.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/exception.hpp"><tt>exception.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
-<pre><a href="exceptions.html"><span class="c2"><tt>join_error</tt></span></a>
-</pre>
- </td>
-
-<td>
-<p>public</p>
-</td>
-</tr>
- </table>
- </div>
- </body>
- </html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>linear_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>linear_probe_fn</tt> Interface</h1>
-
- <p>A probe sequence policy using fixed increments.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class="c2"><tt>linear_probe_fn</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Protected Methods</a></h2>
-
- <h3><a name="link7" id="link7">Offset Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <span class="c1"><tt>i</tt></span>-th
- offset from the hash value.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>list_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>list_update</tt> Interface</h1>
-
- <p>A list-update based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Eq_Fn60085" id="Eq_Fn60085"><b>class</b> Eq_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor.</p>
- </td>
-
- <td>
- <pre>
-std::equal_to<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Update_Policy1671938590" id=
-"Update_Policy1671938590"><b>class</b> Update_Policy </a>
-</pre>
- </td>
-
- <td>
- <p>Update policy (determines when an element will be
- moved to the front of the list.</p>
- </td>
-
- <td><a href="move_to_front_lu_policy.html"><span class=
- "c2"><tt>move_to_front_lu_policy</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="container_base.html"><span class=
-"c2"><tt>container_base</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="eq_fn80245" id="eq_fn80245">eq_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Eq_Fn60085"><tt>Eq_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Equivalence functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="update_policy894603998" id=
-"update_policy894603998">update_policy</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Update_Policy1671938590"><tt>Update_Policy</tt></a>
-</pre>
- </td>
-
- <td>
- <p>List update policy type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- list_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- list_update
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- list_update
- (<b>const</b> <span class=
-"c2"><tt>list_update</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~list_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>list_update</tt></span> &
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>list_update</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class="c2"><tt>list_update</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>list_update_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>list_update_tag</tt> Interface</h1>
-
- <p>List-update data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="associative_container_tag.html"><span class=
-"c2"><tt>associative_container_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>List-Based Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>List-Update Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The list-based container has the following declaration:</p>
- <pre>
-<b>template</b><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Eq_Fn = std::equal_to<Key>,
- <b>typename</b> Update_Policy = <a href=
-"move_to_front_lu_policy.html">move_to_front_lu_policy<></a>,
- <b>typename</b> Allocator = std::allocator<<b>char</b>> >
-<b>class</b> <a href="list_update.html">list_update</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Key</tt> is the key type.</li>
-
- <li><tt>Mapped</tt> is the mapped-policy, and is explained in
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>.</li>
-
- <li><tt>Eq_Fn</tt> is a key equivalence functor.</li>
-
- <li><tt>Update_Policy</tt> is a policy updating positions in
- the list based on access patterns. It is described in the
- following subsection.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>A list-based associative container is a container that
- stores elements in a linked-list. It does not order the
- elements by any particular order related to the keys.
- List-based containers are primarily useful for creating
- "multimaps" (see <a href=
- "motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Avoiding Multiple Keys</a> and <a href=
- "tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>). In
- fact, list-based containers are designed in <tt>pb_ds</tt>
- expressly for this purpose. This is explained further in
- <a href="#mmaps">Use for "Multimaps"</a>.</p>
-
- <p>List-based containers might also be useful for some rare
- cases, where a key is encapsulated to the extent that only
- key-equivalence can be tested. Hash-based containers need to
- know how to transform a key into a size type, and tree-based
- containers need to know if some key is larger than another.
- List-based associative containers, conversely, only need to
- know if two keys are equivalent.</p>
-
- <p>Since a list-based associative container does not order
- elements by keys, is it possible to order the list in some
- useful manner? Remarkably, many on-line competitive [<a href=
- "references.html#motwani95random">motwani95random</a>]
- algorithms exist for reordering lists to reflect access
- prediction [<a href=
- "references.html#andrew04mtf">andrew04mtf</a>].</p>
-
- <h2><a name="list_updates" id="list_updates">List
- Updates</a></h2>
-
- <h3><a name="general" id="general">General Terms</a></h3>
-
- <p>Figure <a href="#simple_list">A simple list</a> shows a
- simple list of integer keys. If we search for the integer 6, we
- are paying an overhead: the link with key 6 is only the fifth
- link; if it were the first link, it could be accessed
- faster.</p>
-
- <h6 class="c1"><a name="simple_list" id="simple_list"><img src=
- "simple_list.png" alt="no image" /></a></h6>
-
- <h6 class="c1">A simple list.</h6>
-
- <p>List-update algorithms reorder lists as elements are
- accessed. They try to determine, by the access history, which
- keys to move to the front of the list. Some of these algorithms
- require adding some metadata alongside each entry.</p>
-
- <p>For example, Figure <a href="#lu">The counter algorithm</a>
- -A shows the counter algorithm. Each node contains both a key
- and a count metadata (shown in bold). When an element is
- accessed (<i>e.g.</i> 6) its count is incremented, as shown in
- Figure <a href="#lu">The counter algorithm</a> -B. If the count
- reaches some predetermined value, say 10, as shown in Figure
- <a href="#lu">The counter algorithm</a> -C, the count is set to
- 0 and the node is moved to the front of the list, as in Figure
- <a href="#lu">The counter algorithm</a> -D.</p>
-
- <h6 class="c1"><a name="lu" id="lu"><img src="lu.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">The counter algorithm.</h6>
-
- <h3><a name="imp_pb_ds" id="imp_pb_ds">Implementation</a></h3>
-
- <p><tt>pb_ds</tt> allows instantiating lists with policies
- implementing any algorithm moving nodes to the front of the
- list (policies implementing algorithms interchanging nodes are
- unsupported).</p>
-
- <p>Associative containers based on lists are parametrized by a
- <tt>Update_Policy</tt> parameter. This parameter defines the
- type of metadata each node contains, how to create the
- metadata, and how to decide, using this metadata, whether to
- move a node to the front of the list. A list-based associative
- container object derives (publicly) from its update policy.
- Figure <a href="#update_policy_cd">A list and its update
- policy</a> shows the scheme, as well as some predefined
- policies (which are explained below).</p>
-
- <h6 class="c1"><a name="update_policy_cd" id=
- "update_policy_cd"><img src="update_policy_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">A list and its update policy.</h6>
-
- <p>An instantiation of <tt>Update_Policy</tt> must define
- internally <tt>update_metadata</tt> as the metadata it
- requires. Internally, each node of the list contains, besides
- the usual key and data, an instance of <tt><b>typename</b>
- Update_Policy::update_metadata</tt>.</p>
-
- <p>An instantiation of <tt>Update_Policy</tt> must define
- internally two operators:</p>
- <pre>
-update_metadata
-<b>operator</b>()();
-
-<b>bool</b>
-<b>operator</b>()(update_metadata &);
-</pre>
-
- <p>The first is called by the container object, when creating a
- new node, to create the node's metadata. The second is called
- by the container object, when a node is accessed (<i>e.g.</i>,
- when a find operation's key is equivalent to the key of the
- node), to determine whether to move the node to the front of
- the list.</p>
-
- <p>The library contains two predefined implementations of
- list-update policies [<a href=
- "references.html#andrew04mtf">andrew04mtf</a>]. The first is
- <a href=
- "counter_lu_policy.html"><tt>counter_lu_policy</tt></a>, which
- implements the counter algorithm described above. The second is
- <a href=
- "move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>,
- which unconditionally move an accessed element to the front of
- the list. The latter type is very useful in <tt>pb_ds</tt>,
- since there is no need to associate metadata with each element
- (this is explained further in <a href="#mmaps">Use for
- "Multimaps"</a>).</p>
-
- <h2><a name="mmaps" id="mmaps">Use for "Multimaps"</a></h2>
-
- <p>In <tt>pb_ds</tt>, there are no equivalents for the STL's
- multimaps and multisets; instead one uses an associative
- container mapping primary keys to secondary keys (see <a href=
- "motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a> and
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>).</p>
-
- <p>List-based containers are especially useful as associative
- containers for secondary keys. In fact, they are implemented
- here expressly for this purpose.</p>
-
- <p>To begin with, these containers use very little per-entry
- structure memory overhead, since they can be implemented as
- singly-linked lists. (Arrays use even lower per-entry memory
- overhead, but they are less flexible in moving around entries,
- and have weaker invalidation guarantees).</p>
-
- <p>More importantly, though, list-based containers use very
- little per-container memory overhead. The memory overhead of an
- empty list-based container is practically that of a pointer.
- This is important for when they are used as secondary
- associative-containers in situations where the average ratio of
- secondary keys to primary keys is low (or even 1).</p>
-
- <p>In order to reduce the per-container memory overhead as much
- as possible, they are implemented as closely as possible to
- singly-linked lists.</p>
-
- <ol>
- <li>List-based containers do not store internally the number
- of values that they hold. This means that their <tt>size</tt>
- method has linear complexity (just like <tt>std::list</tt>).
- Note that finding the number of equivalent-key values in an
- STL multimap also has linear complexity (because it must be
- done, <i>e.g.</i>, via <tt>std::distance</tt> of the
- multimap's <tt>equal_range</tt> method), but usually with
- higher constants.</li>
-
- <li>Most associative-container objects each hold a policy
- object (<i>e.g.</i>, a hash-based container object holds a
- hash functor). List-based containers, conversely, only have
- class-wide policy objects.</li>
- </ol>
-
- <p>See also <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Misc.</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Misc.</h1>
-
- <p><a href="acks.html" title="Acknowledgements">Acks</a>
- contains acknowledgments; <a href="contact.html">Contact</a>
- contains contact information;<a href=
- "disclaimer.html">Disclaimer and Copyright</a> is a standard
- disclaimer, and <a href="references.html">References</a>
- contains references.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Motivation</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Motivation</h1>
-
- <p>Many fine associative-container libraries were already
- written, most notably, the STL's associative containers. Why
- then write another library? This section shows some possible
- advantages of this library, when considering the challenges in
- <a href="introduction.html">Introduction</a>. Many of these
- points stem from the fact that the STL introduced
- associative-containers in a two-step process (first
- standardizing tree-based containers, only then adding
- hash-based containers, which are fundamentally different), did
- not standardize priority queues as containers, and (in our
- opinion) overloads the iterator concept.</p>
-
- <h2><a name="assoc" id="assoc">Associative Containers</a></h2>
-
- <h3><a name="assoc_policies" id="assoc_policies">More
- Configuration Choices</a></h3>
-
- <p>Associative containers require a relatively large number of
- policies to function efficiently in various settings. In some
- cases this is needed for making their common operations more
- efficient, and in other cases this allows them to support a
- larger set of operations</p>
-
- <ol>
- <li>Hash-based containers, for example, support look-up and
- insertion methods (<i>e.g.</i>, <tt>find</tt> and
- <tt>insert</tt>). In order to locate elements quickly, they
- are supplied a hash functor, which instruct how to transform
- a key object into some size type; <i>e.g.</i>, a hash functor
- might transform <tt>"hello"</tt> into <tt>1123002298</tt>. A
- hash table, though, requires transforming each key object
- into some size-type type in some specific domain;
- <i>e.g.</i>, a hash table with a 128-long table might
- transform <tt>"hello"</tt> into position 63. The policy by
- which the hash value is transformed into a position within
- the table can dramatically affect performance (see <a href=
- "hash_based_containers.html#hash_policies">Design::Associative
- Containers::Hash-Based Containers::Hash Policies</a>).
- Hash-based containers also do not resize naturally (as
- opposed to tree-based containers, for example). The
- appropriate resize policy is unfortunately intertwined with
- the policy that transforms hash value into a position within
- the table (see <a href=
- "hash_based_containers.html#resize_policies">Design::Associative
- Containers::Hash-Based Containers::Resize Policies</a>).
-
- <p><a href=
- "assoc_performance_tests.html#hash_based">Associative-Container
- Performance Tests::Hash-Based Containers</a> quantifies
- some of these points.</p>
- </li>
-
- <li>Tree-based containers, for example, also support look-up
- and insertion methods, and are primarily useful when
- maintaining order between elements is important. In some
- cases, though, one can utilize their balancing algorithms for
- completely different purposes.
-
- <p>Figure <a href="#node_invariants">Metadata for
- order-statistics and interval intersections</a>-A, for
- example, shows a tree whose each node contains two entries:
- a floating-point key, and some size-type <i>metadata</i>
- (in bold beneath it) that is the number of nodes in the
- sub-tree. (<i>E.g.</i>, the root has key 0.99, and has 5
- nodes (including itself) in its sub-tree.) A container based
- on this data structure can obviously answer efficiently
- whether 0.3 is in the container object, but it can also
- answer what is the order of 0.3 among all those in the
- container object [<a href=
- "references.html#clrs2001">clrs2001</a>] (see <a href=
- "assoc_examples.html#tree_like_based">Associative Container
- Examples::Tree-Like-Based Containers (Trees and
- Tries)</a>).</p>
-
- <p>As another example, Figure <a href=
- "#node_invariants">Metadata for order-statistics and
- interval intersections</a>-B shows a tree whose each node
- contains two entries: a half-open geometric line interval,
- and a number <i>metadata</i> (in bold beneath it) that is
- the largest endpoint of all intervals in its sub-tree.
- (<i>E.g.</i>, the root describes the interval <i>[20,
- 36)</i>, and the largest endpoint in its sub-tree is 99.) A
- container based on this data structure can obviously answer
- efficiently whether <i>[3, 41)</i> is in the container
- object, but it can also answer efficiently whether the
- container object has intervals that intersect <i>[3,
- 41)</i> (see <a href=
- "assoc_examples.html#tree_like_based">Associative Container
- Examples::Tree-Like-Based Containers (Trees and
- Tries)</a>). These types of queries are very useful in
- geometric algorithms and lease-management algorithms.</p>
-
- <p>It is important to note, however, that as the trees are
- modified, their internal structure changes. To maintain
- these invariants, one must supply some policy that is aware
- of these changes (see <a href=
- "tree_based_containers.html#invariants">Design::Associative
- Containers::Tree-Based Containers::Node Invariants</a>);
- without this, it would be better to use a linked list (in
- itself very efficient for these purposes).</p>
-
- <p><a href=
- "assoc_performance_tests.html#tree_like_based">Associative-Container
- Performance Tests::Tree-Like-Based Containers</a>
- quantifies some of these points.</p>
- </li>
- </ol>
-
- <h6 class="c1"><a name="node_invariants" id=
- "node_invariants"><img src="node_invariants.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Metadata for order-statistics and interval
- intersections.</h6>
-
- <h3><a name="assoc_ds_genericity" id="assoc_ds_genericity">More
- Data Structures and Traits</a></h3>
-
- <p>The STL contains associative containers based on red-black
- trees and collision-chaining hash tables. These are obviously
- very useful, but they are not ideal for all types of
- settings.</p>
-
- <p>Figure <a href=
- "#different_underlying_data_structures">Different underlying
- data structures</a> shows different underlying data structures
- (the ones currently supported in <tt>pb_ds</tt>). A shows a
- collision-chaining hash-table, B shows a probing hash-table, C
- shows a red-black tree, D shows a splay tree, E shows a tree
- based on an ordered vector(implicit in the order of the
- elements), F shows a PATRICIA trie, and G shows a list-based
- container with update policies.</p>
-
- <p>Each of these data structures has some performance benefits,
- in terms of speed, size or both (see <a href=
- "assoc_performance_tests.html">Associative-Container
- Performance Tests</a> and <a href=
- "assoc_performance_tests.html#dss_family_choice">Associative-Container
- Performance Tests::Observations::Underlying Data-Structure
- Families</a>). For now, though, note that <i>e.g.</i>,
- vector-based trees and probing hash tables manipulate memory
- more efficiently than red-black trees and collision-chaining
- hash tables, and that list-based associative containers are
- very useful for constructing "multimaps" (see <a href=
- "#assoc_mapping_semantics">Alternative to Multiple Equivalent
- Keys</a>, <a href=
- "assoc_performance_tests.html#multimaps">Associative Container
- Performance Tests::Multimaps</a>, and <a href=
- "assoc_performance_tests.html#msc">Associative Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>).</p>
-
- <h6 class="c1"><a name="different_underlying_data_structures"
- id="different_underlying_data_structures"><img src=
- "different_underlying_dss.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Different underlying data structures.</h6>
-
- <p>Now consider a function manipulating a generic associative
- container, <i>e.g.</i>,</p>
- <pre>
-<b>template</b><
- <b>class</b> Cntnr>
-<b>int</b>
- some_op_sequence
- (Cntnr &r_cnt)
-{
- ...
-}
-</pre>
-
- <p>Ideally, the underlying data structure of <tt>Cntnr</tt>
- would not affect what can be done with <tt>r_cnt</tt>.
- Unfortunately, this is not the case.</p>
-
- <p>For example, if <tt>Cntnr</tt> is <tt>std::map</tt>, then
- the function can use <tt>std::for_each(r_cnt.find(foo),
- r_cnt.find(bar), foobar)</tt> in order to apply <tt>foobar</tt>
- to all elements between <tt>foo</tt> and <tt>bar</tt>. If
- <tt>Cntnr</tt> is a hash-based container, then this call's
- results are undefined.</p>
-
- <p>Also, if <tt>Cntnr</tt> is tree-based, the type and object
- of the comparison functor can be accessed. If <tt>Cntnr</tt> is
- hash based, these queries are nonsensical.</p>
-
- <p>There are various other differences based on the container's
- underlying data structure. For one, they can be constructed by,
- and queried for, different policies. Furthermore:</p>
-
- <ol>
- <li>Containers based on C, D, E and F store elements in a
- meaningful order; the others store elements in a meaningless
- (and probably time-varying) order. By implication, only
- containers based on C, D, E and F can support erase
- operations taking an iterator and returning an iterator to
- the following element without performance loss (see <a href=
- "#assoc_ers_methods">Slightly Different Methods::Methods
- Related to Erase</a>).</li>
-
- <li>Containers based on C, D, E, and F can be split and
- joined efficiently, while the others cannot. Containers based
- on C and D, furthermore, can guarantee that this is
- exception-free; containers based on E cannot guarantee
- this.</li>
-
- <li>Containers based on all but E can guarantee that erasing
- an element is exception free; containers based on E cannot
- guarantee this. Containers based on all but B and E can
- guarantee that modifying an object of their type does not
- invalidate iterators or references to their elements, while
- containers based on B and E cannot. Containers based on C, D,
- and E can furthermore make a stronger guarantee, namely that
- modifying an object of their type does not affect the order
- of iterators.</li>
- </ol>
-
- <p>A unified tag and traits system (as used for the STL's
- iterators, for example) can ease generic manipulation of
- associative containers based on different underlying
- data structures (see <a href=
- "tutorial.html#assoc_ds_gen">Tutorial::Associative
- Containers::Determining Containers' Attributes</a> and <a href=
- "ds_gen.html#container_traits">Design::Associative
- Containers::Data-Structure Genericity::Data-Structure Tags and
- Traits</a>).</p>
-
- <h3><a name="assoc_diff_it" id="assoc_diff_it">Differentiating
- between Iterator Types</a></h3>
-
- <p>Iterators are centric to the STL's design, because of the
- container/algorithm/iterator decomposition that allows an
- algorithm to operate on a range through iterators of some
- sequence (<i>e.g.</i>, one originating from a container).
- Iterators, then, are useful because they allow going over a
- <u>sequence</u>. The STL also uses iterators for accessing a
- <u>specific</u> element - <i>e.g.</i>, when an associative
- container returns one through <tt>find</tt>. The STL, however,
- consistently uses the same types of iterators for both
- purposes: going over a range, and accessing a specific found
- element. Before the introduction of hash-based containers to
- the STL, this made sense (with the exception of priority
- queues, which are discussed in <a href="#pq">Priority
- Queues</a>).</p>
-
- <p>Using the STL's associative containers together with
- non-order-preserving associative containers (and also because
- of priority-queues container), there is a possible need for
- different types of iterators for self-organizing containers -
- the iterator concept seems overloaded to mean two different
- things (in some cases). The following subsections explain this;
- <a href="tutorial.html#assoc_find_range">Tutorial::Associative
- Containers::Point-Type and Range-Type Methods</a> explains an
- alternative design which does not complicate the use of
- order-preserving containers, but is better for unordered
- containers; <a href=
- "ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods</a> explains the design further.</p>
-
- <h4><a name="assoc_find_it_range_it" id=
- "assoc_find_it_range_it">Using Point-Type Iterators for
- Range-Type Operations</a></h4>
-
- <p>Suppose <tt>cntnr</tt> is some associative container, and
- say <tt>c</tt> is an object of type <tt>cntnr</tt>. Then what
- will be the outcome of</p>
- <pre>
-std::for_each(c.find(1), c.find(5), foo);
-</pre>
-
- <p>If <tt>cntnr</tt> is a tree-based container object, then an
- in-order walk will apply <tt>foo</tt> to the relevant elements,
- <i>e.g.</i>, as in Figure <a href="#range_it_in_hts">Range
- iteration in different data structures</a> -A. If <tt>c</tt> is
- a hash-based container, then the order of elements between any
- two elements is undefined (and probably time-varying); there is
- no guarantee that the elements traversed will coincide with the
- <i>logical</i> elements between 1 and 5, <i>e.g.</i>, as in
- Figure <a href="#range_it_in_hts">Range iteration in different
- data structures</a>-B.</p>
-
- <h6 class="c1"><a name="range_it_in_hts" id=
- "range_it_in_hts"><img src="point_iterators_range_ops_1.png"
- alt="no image" /></a></h6>
-
- <h6 class="c1">Range iteration in different
- data structures.</h6>
-
- <p>In our opinion, this problem is not caused just because
- red-black trees are order preserving while collision-chaining
- hash tables are (generally) not - it is more fundamental. Most
- of the STL's containers order sequences in a well-defined
- manner that is determined by their <u>interface</u>: calling
- <tt>insert</tt> on a tree-based container modifies its sequence
- in a predictable way, as does calling <tt>push_back</tt> on a
- list or a vector. Conversely, collision-chaining hash tables,
- probing hash tables, priority queues, and list-based containers
- (which are very useful for "multimaps") are self-organizing
- data structures; the effect of each operation modifies their
- sequences in a manner that is (practically) determined by their
- <u>implementation</u>.</p>
-
- <p>Consequently, applying an algorithm to a sequence obtained
- from most containers <u>may or may not</u> make sense, but
- applying it to a sub-sequence of a self-organizing container
- <u>does not</u>.</p>
-
- <h4><a name="assoc_range_it_for_find_it" id=
- "assoc_range_it_for_find_it">The Cost of Enabling Range
- Capabilities to Point-Type Iterators</a></h4>
-
- <p>Suppose <tt>c</tt> is some collision-chaining hash-based
- container object, and one calls <tt>c.find(3)</tt>. Then what
- composes the returned iterator?</p>
-
- <p>Figure <a href="#find_its_in_hash_tables">Point-type
- iterators in hash tables</a>-A shows the simplest (and most
- efficient) implementation of a collision-chaining hash table.
- The little box marked <tt>point_iterator</tt> shows an object
- that contains a pointer to the element's node. Note that this
- "iterator" has no way to move to the next element (<i>i.e.</i>,
- it cannot support <tt><b>operator</b>++</tt>). Conversely, the
- little box marked <tt>iterator</tt> stores both a pointer to
- the element, as well as some other information (<i>e.g.</i>,
- the bucket number of the element). the second iterator, then,
- is "heavier" than the first one- it requires more time and
- space. If we were to use a different container to
- cross-reference into this hash-table using these iterators - it
- would take much more space. As noted in <a href=
- "#assoc_find_it_range_it">Using Point-Type Iterators for
- Range-Type Operations</a>, nothing much can be done by
- incrementing these iterators, so why is this extra information
- needed?</p>
-
- <p>Alternatively, one might create a collision-chaining
- hash-table where the lists might be linked, forming a
- monolithic total-element list, as in Figure <a href=
- "#find_its_in_hash_tables">Point-type iterators in hash
- tables</a>-B (this seems similar to the Dinkumware design
- [<a href="references.html#dinkumware_stl">dinkumware_stl</a>]).
- Here the iterators are as light as can be, but the hash-table's
- operations are more complicated.</p>
-
- <h6 class="c1"><a name="find_its_in_hash_tables" id=
- "find_its_in_hash_tables"><img src=
- "point_iterators_range_ops_2.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Point-type iterators in hash tables.</h6>
-
- <p>It should be noted that containers based on
- collision-chaining hash-tables are not the only ones with this
- type of behavior; many other self-organizing data structures
- display it as well.</p>
-
- <h4><a name="assoc_inv_guar" id="assoc_inv_guar">Invalidation
- Guarantees</a></h4>
-
- <p>Consider the following snippet:</p>
- <pre>
-it = c.find(3);
-
-c.erase(5);
-</pre>
-
- <p>Following the call to <tt>erase</tt>, what is the validity
- of <tt>it</tt>: can it be de-referenced? can it be
- incremented?</p>
-
- <p>The answer depends on the underlying data structure of the
- container. Figure <a href=
- "#invalidation_guarantee_erase">Effect of erase in different
- underlying data structures</a> shows three cases: A1 and A2
- show a red-black tree; B1 and B2 show a probing hash-table; C1
- and C2 show a collision-chaining hash table.</p>
-
- <h6 class="c1"><a name="invalidation_guarantee_erase" id=
- "invalidation_guarantee_erase"><img src=
- "invalidation_guarantee_erase.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Effect of erase in different underlying
- data structures.</h6>
-
- <ol>
- <li>Erasing 5 from A1 yields A2. Clearly, an iterator to 3
- can be de-referenced and incremented. The sequence of
- iterators changed, but in a way that is well-defined by the
- <u>interface</u>.</li>
-
- <li>Erasing 5 from B1 yields B2. Clearly, an iterator to 3 is
- not valid at all - it cannot be de-referenced or incremented;
- the order of iterators changed in a way that is (practically)
- determined by the <u>implementation</u> and not by the
- <u>interface</u>.</li>
-
- <li>Erasing 5 from C1 yields C2. Here the situation is more
- complicated. On the one hand, there is no problem in
- de-referencing <tt>it</tt>. On the other hand, the order of
- iterators changed in a way that is (practically) determined
- by the <u>implementation</u> and not by the
- <u>interface</u>.</li>
- </ol>
-
- <p>So in classic STL, it is not always possible to express
- whether <tt>it</tt> is valid or not. This is true also for
- <tt>insert</tt>, <i>e.g.</i>. Again, the iterator concept seems
- overloaded.</p>
-
- <h3><a name="assoc_methods" id="assoc_methods">Slightly
- Different Methods</a></h3>
-
- <p>[<a href="references.html#meyers02both">meyers02both</a>]
- points out that a class's methods should comprise only
- operations which depend on the class's internal structure;
- other operations are best designed as external functions.
- Possibly, therefore, the STL's associative containers lack some
- useful methods, and provide some other methods which would be
- better left out (<i>e.g.</i>, [<a href=
- "references.html#sgi_stl">sgi_stl</a>] ).</p>
-
- <h4><a name="assoc_ers_methods" id="assoc_ers_methods">Methods
- Related to Erase</a></h4>
-
- <ol>
- <li>Order-preserving STL associative containers provide the
- method
- <pre>
-iterator
- erase
- (iterator it)
-</pre>which takes an iterator, erases the corresponding element,
-and returns an iterator to the following element. Also hash-based
-STL associative containers provide this method. This <u>seemingly
-increases</u> genericity between associative containers, since, <i>
- e.g.</i>, it is possible to use
- <pre>
-<b>typename</b> C::iterator it = c.begin();
-<b>typename</b> C::iterator e_it = c.end();
-
-<b>while</b>(it != e_it)
- it = pred(*it)? c.erase(it) : ++it;
-</pre>in order to erase from a container object <tt>
- c</tt> all element which match a predicate <tt>pred</tt>.
- However, in a different sense this actually
- <u>decreases</u> genericity: an integral implication of
- this method is that tree-based associative containers'
- memory use is linear in the total number of elements they
- store, while hash-based containers' memory use is unbounded
- in the total number of elements they store. Assume a
- hash-based container is allowed to decrease its size when
- an element is erased. Then the elements might be rehashed,
- which means that there is no "next" element - it is simply
- undefined. Consequently, it is possible to infer from the
- fact that STL hash-based containers provide this method
- that they cannot downsize when elements are erased
- (<a href="assoc_performance_tests.html#hash_based">Performance
- Tests::Hash-Based Container Tests</a> quantifies this.) As
- a consequence, different code is needed to manipulate
- different containers, assuming that memory should be
- conserved. <tt>pb_ds</tt>'s non-order preserving
- associative containers omit this method.
- </li>
-
- <li>All of <tt>pb_ds</tt>'s associative containers include a
- conditional-erase method
- <pre>
-<b>template</b><
- <b>class</b> Pred>
-size_type
- erase_if
- (Pred pred)
-</pre>which erases all elements matching a predicate. This is
-probably the only way to ensure linear-time multiple-item erase
-which can actually downsize a container.
- </li>
-
- <li>STL associative containers provide methods for
- multiple-item erase of the form
- <pre>
-size_type
- erase
- (It b,
- It e)
-</pre>erasing a range of elements given by a pair of iterators. For
-tree-based or trie-based containers, this can implemented more
-efficiently as a (small) sequence of split and join operations. For
-other, unordered, containers, this method isn't much better than an
-external loop. Moreover, if <tt>c</tt> is a hash-based container,
-then, <i>e.g.</i>, <tt>c.erase(c.find(2), c.find(5))</tt> is almost
-certain to do something different than erasing all elements whose
-keys are between 2 and 5, and is likely to produce other undefined
-behavior.
- </li>
- </ol>
-
- <h4><a name="assoc_split_join_methods" id=
- "assoc_split_join_methods">Methods Related to Split and
- Join</a></h4>
-
- <p>It is well-known that tree-based and trie-based container
- objects can be efficiently split or joined [<a href=
- "references.html#clrs2001">clrs2001</a>]. Externally splitting
- or joining trees is super-linear, and, furthermore, can throw
- exceptions. Split and join methods, consequently, seem good
- choices for tree-based container methods, especially, since as
- noted just before, they are efficient replacements for erasing
- sub-sequences. <a href=
- "assoc_performance_tests.html#tree_like_based">Performance
- Tests::Tree-Like-Based Container Tests</a> quantifies this.</p>
-
- <h4><a name="assoc_insert_methods" id=
- "assoc_insert_methods">Methods Related to Insert</a></h4>
-
- <p>STL associative containers provide methods of the form</p>
- <pre>
-<b>template</b><
- <b>class</b> It>
-size_type
- insert
- (It b,
- It e);
-</pre>for inserting a range of elements given by a pair of
-iterators. At best, this can be implemented as an external loop,
-or, even more efficiently, as a join operation (for the case of
-tree-based or trie-based containers). Moreover, these methods seem
-similar to constructors taking a range given by a pair of
-iterators; the constructors, however, are transactional, whereas
-the insert methods are not; this is possibly confusing.
-
- <h4><a name="assoc_equiv_comp_methods" id=
- "assoc_equiv_comp_methods">Functions Related to
- Comparison</a></h4>
-
- <p>Associative containers are parametrized by policies
- allowing to test key equivalence; <i>e.g.</i> a hash-based
- container can do this through its equivalence functor, and a
- tree-based container can do this through its comparison
- functor. In addition, some STL associative containers have
- global function operators, <i>e.g.</i>,
- <tt><b>operator</b>==</tt> and <tt><b>operator</b><=</tt>,
- that allow comparing entire associative containers.</p>
-
- <p>In our opinion, these functions are better left out. To
- begin with, they do not significantly improve over an external
- loop. More importantly, however, they are possibly misleading -
- <tt><b>operator</b>==</tt>, for example, usually checks for
- equivalence, or interchangeability, but the associative
- container cannot check for values' equivalence, only keys'
- equivalence; also, are two containers considered equivalent if
- they store the same values in different order? this is an
- arbitrary decision.</p>
-
- <h3><a name="assoc_mapping_semantics" id=
- "assoc_mapping_semantics">Alternative to Multiple Equivalent
- Keys</a></h3>
-
- <p>Maps (or sets) allow mapping (or storing) unique-key values.
- The STL, however, also supplies associative containers which
- map (or store) multiple values with equivalent keys:
- <tt>std::multimap</tt>, <tt>std::multiset</tt>,
- <tt>std::tr1::unordered_multimap</tt>, and
- <tt>unordered_multiset</tt>. We first discuss how these might
- be used, then why we think it is best to avoid them.</p>
-
- <p>Suppose one builds a simple bank-account application that
- records for each client (identified by an <tt>std::string</tt>)
- and account-id (marked by an <tt><b>unsigned long</b></tt>) -
- the balance in the account (described by a
- <tt><b>float</b></tt>). Suppose further that ordering this
- information is not useful, so a hash-based container is
- preferable to a tree based container. Then one can use</p>
- <pre>
-std::tr1::unordered_map<std::pair<std::string, <b>unsigned long</b>>, <b>float</b>, ...>
-</pre>which <u>hashes every combination of client and
-account-id</u>. This might work well, except for the fact that it
-is now impossible to efficiently list all of the accounts of a
-specific client (this would practically require iterating over all
-entries). Instead, one can use
- <pre>
-std::tr1::unordered_multimap<std::pair<std::string, <tt><b>unsigned long</b></tt>>, <b>float</b>, ...>
-</pre>which <u>hashes every client</u>, and <u>decides equivalence
-based on client</u> only. This will ensure that all accounts
-belonging to a specific user are stored consecutively.
-
- <p>Also, suppose one wants an integers' priority queue
- (<i>i.e.,</i> a container that supports <tt>push</tt>,
- <tt>pop</tt>, and <tt>top</tt> operations, the last of which
- returns the largest <tt><b>int</b></tt>) that also supports
- operations such as <tt>find</tt> and <tt>lower_bound</tt>. A
- reasonable solution is to build an adapter over
- <tt>std::set<<b>int</b>></tt>. In this adapter,
- <i>e.g.</i>, <tt>push</tt> will just call the tree-based
- associative container's <tt>insert</tt> method; <tt>pop</tt>
- will call its <tt>end</tt> method, and use it to return the
- preceding element (which must be the largest). Then this might
- work well, except that the container object cannot hold
- multiple instances of the same integer (<tt>push(4)</tt>,
- <i>e.g.</i>, will be a no-op if <tt>4</tt> is already in the
- container object). If multiple keys are necessary, then one
- might build the adapter over an
- <tt>std::multiset<<b>int</b>></tt>.</p>
-
- <p class="c1">STL non-unique-mapping containers, then, are
- useful when (1) a key can be decomposed in to a primary key and
- a secondary key, (2) a key is needed multiple times, or (3) any
- combination of (1) and (2).</p>
-
- <p>Figure <a href="#embedded_lists_1">Non-unique mapping
- containers in the STL's design</a> shows how the STL's design
- works internally; in this figure nodes shaded equally represent
- equivalent-key values. Equivalent keys are stored consecutively
- using the properties of the underlying data structure: binary
- search trees (Figure <a href="#embedded_lists_1">Non-unique
- mapping containers in the STL's design</a>-A) store
- equivalent-key values consecutively (in the sense of an
- in-order walk) naturally; collision-chaining hash tables
- (Figure <a href="#embedded_lists_1">Non-unique mapping
- containers in the STL's design</a>-B) store equivalent-key
- values in the same bucket, the bucket can be arranged so that
- equivalent-key values are consecutive.</p>
-
- <h6 class="c1"><a name="embedded_lists_1" id=
- "embedded_lists_1"><img src="embedded_lists_1.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Non-unique mapping containers in the STL's
- design.</h6>
-
- <p>Put differently, STL non-unique mapping
- associative-containers are associative containers that map
- primary keys to linked lists that are embedded into the
- container. Figure <a href="#embedded_lists_2">Effect of
- embedded lists in STL multimaps</a> shows again the two
- containers from Figure <a href="#embedded_lists_1">Non-unique
- mapping containers in the STL's design</a>, this time with the
- embedded linked lists of the grayed nodes marked
- explicitly.</p>
-
- <h6 class="c1"><a name="embedded_lists_2" id=
- "embedded_lists_2"><img src="embedded_lists_2.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Effect of embedded lists in STL multimaps.</h6>
-
- <p>These embedded linked lists have several disadvantages.</p>
-
- <ol>
- <li>The underlying data structure embeds the linked lists
- according to its own consideration, which means that the
- search path for a value might include several different
- equivalent-key values. For example, the search path for the
- the black node in either of Figures <a href=
- "#embedded_lists_1">Non-unique mapping containers in the
- STL's design</a> A or B, includes more than a single gray
- node.</li>
-
- <li>The links of the linked lists are the underlying
- data structures' nodes, which typically are quite structured.
- <i>E.g.</i>, in the case of tree-based containers (Figure
- <a href="#embedded_lists_2">Effect of embedded lists in STL
- multimaps</a>-B), each "link" is actually a node with three
- pointers (one to a parent and two to children), and a
- relatively-complicated iteration algorithm. The linked lists,
- therefore, can take up quite a lot of memory, and iterating
- over all values equal to a given key (<i>e.g.</i>, through
- the return value of the STL's <tt>equal_range</tt>) can be
- expensive.</li>
-
- <li>The primary key is stored multiply; this uses more
- memory.</li>
-
- <li>Finally, the interface of this design excludes several
- useful underlying data structures. <i>E.g.</i>, of all the
- unordered self-organizing data structures, practically only
- collision-chaining hash tables can (efficiently) guarantee
- that equivalent-key values are stored consecutively.</li>
- </ol>
-
- <p>The above reasons hold even when the ratio of secondary keys
- to primary keys (or average number of identical keys) is small,
- but when it is large, there are more severe problems:</p>
-
- <ol>
- <li>The underlying data structures order the links inside
- each embedded linked-lists according to their internal
- considerations, which effectively means that each of the
- links is unordered. Irrespective of the underlying
- data structure, searching for a specific value can degrade to
- linear complexity.</li>
-
- <li>Similarly to the above point, it is impossible to apply
- to the secondary keys considerations that apply to primary
- keys. For example, it is not possible to maintain secondary
- keys by sorted order.</li>
-
- <li>While the interface "understands" that all equivalent-key
- values constitute a distinct list (<i>e.g.</i>, through
- <tt>equal_range</tt>), the underlying data structure
- typically does not. This means, <i>e.g.</i>, that operations
- such as erasing from a tree-based container all values whose
- keys are equivalent to a a given key can be super-linear in
- the size of the tree; this is also true also for several
- other operations that target a specific list.</li>
- </ol>
-
- <p>In <tt>pb_ds</tt>, therefore, all associative containers map
- (or store) unique-key values. One can (1) map primary keys to
- secondary associative-containers (<i>i.e.</i>, containers of
- secondary keys) or non-associative containers (2) map identical
- keys to a size-type representing the number of times they
- occur, or (3) any combination of (1) and (2). Instead of
- allowing multiple equivalent-key values, <tt>pb_ds</tt>
- supplies associative containers based on underlying
- data structures that are suitable as secondary
- associative-containers (see <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>).</p>
-
- <p>Figures <a href="#embedded_lists_3">Non-unique mapping
- containers in <tt>pb_ds</tt></a> A and B show the equivalent
- structures in <tt>pb_ds</tt>'s design, to those in Figures
- <a href="#embedded_lists_1">Non-unique mapping containers in
- the STL's design</a> A and B, respectively. Each shaded box
- represents some size-type or secondary
- associative-container.</p>
-
- <h6 class="c1"><a name="embedded_lists_3" id=
- "embedded_lists_3"><img src="embedded_lists_3.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Non-unique mapping containers in the
- <tt>pb_ds</tt>.</h6>
-
- <p>In the first example above, then, one would use an
- associative container mapping each user to an associative
- container which maps each application id to a start time (see
- <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_multimap.cc"><tt>basic_multimap.cc</tt></a>);
- in the second example, one would use an associative container
- mapping each <tt><b>int</b></tt> to some size-type indicating
- the number of times it logically occurs (see <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_multiset.cc"><tt>basic_multiset.cc</tt></a>).</p>
-
- <p><a href=
- "assoc_performance_tests.html#multimaps">Associative-Container
- Performance Tests::Multimaps</a> quantifies some of these
- points, and <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a> shows some simple calculations.</p>
-
- <p><a href="assoc_examples.html#mmaps">Associative-Container
- Examples::Multimaps</a> shows some simple examples of using
- "multimaps".</p>
-
- <p><a href="lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a> discusses types of
- containers especially suited as secondary
- associative-containers.</p>
-
- <h2><a name="pq" id="pq">Priority Queues</a></h2>
-
- <h3><a name="pq_more_ops" id="pq_more_ops">Slightly Different
- Methods</a></h3>
-
- <p>Priority queues are containers that allow efficiently
- inserting values and accessing the maximal value (in the sense
- of the container's comparison functor); <i>i.e.</i>, their
- interface supports <tt>push</tt> and <tt>pop</tt>. The STL's
- priority queues indeed support these methods, but they support
- little else. For algorithmic and software-engineering purposes,
- other methods are needed:</p>
-
- <ol>
- <li>Many graph algorithms [<a href=
- "references.html#clrs2001">clrs2001</a>] require increasing a
- value in a priority queue (again, in the sense of the
- container's comparison functor), or joining two
- priority-queue objects.</li>
-
- <li>It is sometimes necessary to erase an arbitrary value in
- a priority queue. For example, consider the <tt>select</tt>
- function for monitoring file descriptors:
- <pre>
-<b>int</b>
- select
- (<b>int</b> nfds,
- fd_set *readfds,
- fd_set *writefds,
- fd_set *errorfds,
- <b>struct</b> timeval *timeout);
-</pre>then, as the <tt>select</tt> manual page [<a href=
-"references.html#select_man">select_man</a>] states:
-
- <p><q>The nfds argument specifies the range of file
- descriptors to be tested. The select() function tests file
- descriptors in the range of 0 to nfds-1.</q></p>
-
- <p>It stands to reason, therefore, that we might wish to
- maintain a minimal value for <tt>nfds</tt>, and priority
- queues immediately come to mind. Note, though, that when a
- socket is closed, the minimal file description might
- change; in the absence of an efficient means to erase an
- arbitrary value from a priority queue, we might as well
- avoid its use altogether.</p>
-
- <p><a href="pq_examples.html#xref">Priority-Queue
- Examples::Cross-Referencing</a> shows examples for these
- types of operations.</p>
- </li>
-
- <li>STL containers typically support iterators. It is
- somewhat unusual for <tt>std::priority_queue</tt> to omit
- them (see, <i>e.g.</i>, [<a href=
- "references.html#meyers01stl">meyers01stl</a>]). One might
- ask why do priority queues need to support iterators, since
- they are self-organizing containers with a different purpose
- than abstracting sequences. There are several reasons:
-
- <ol>
- <li>Iterators (even in self-organizing containers) are
- useful for many purposes, <i>e.g.</i>, cross-referencing
- containers, serialization, and debugging code that uses
- these containers.</li>
-
- <li>The STL's hash-based containers support iterators,
- even though they too are self-organizing containers with
- a different purpose than abstracting sequences.</li>
-
- <li>In STL-like containers, it is natural to specify the
- interface of operations for modifying a value or erasing
- a value (discussed previously) in terms of a iterators.
- This is discussed further in <a href=
- "pq_design.html#pq_it">Design::Priority
- Queues::Iterators</a>. It should be noted that the STL's
- containers also use iterators for accessing and
- manipulating a specific value. <i>E.g.</i>, in hash-based
- containers, one checks the existence of a key by
- comparing the iterator returned by <tt>find</tt> to the
- iterator returned by <tt>end</tt>, and not by comparing a
- pointer returned by <tt>find</tt> to <tt>NULL</tt>.</li>
- </ol>
- </li>
- </ol>
-
- <p><a href="pq_performance_tests.html">Performance
- Tests::Priority Queues</a> quantifies some of these points.</p>
-
- <h3><a name="pq_ds_genericity" id="pq_ds_genericity">More Data
- Structures and Traits</a></h3>
-
- <p>There are three main implementations of priority queues: the
- first employs a binary heap, typically one which uses a
- sequence; the second uses a tree (or forest of trees), which is
- typically less structured than an associative container's tree;
- the third simply uses an associative container. These are
- shown, respectively, in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 and A2, B, and C.</p>
-
- <h6 class="c1"><a name="pq_different_underlying_dss" id=
- "pq_different_underlying_dss"><img src=
- "pq_different_underlying_dss.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Underlying Priority-Queue Data-Structures.</h6>
-
- <p>No single implementation can completely replace any of the
- others. Some have better <tt>push</tt> and <tt>pop</tt>
- amortized performance, some have better bounded (worst case)
- response time than others, some optimize a single method at the
- expense of others, <i>etc.</i>. In general the "best"
- implementation is dictated by the problem (see <a href=
- "pq_performance_tests.html#pq_observations">Performance
- Tests::Priority Queues::Observations</a>).</p>
-
- <p>As with associative containers (see <a href=
- "#assoc_ds_genericity">Associative Containers::Traits for
- Underlying Data-Structures</a>), the more implementations
- co-exist, the more necessary a traits mechanism is for handling
- generic containers safely and efficiently. This is especially
- important for priority queues, since the invalidation
- guarantees of one of the most useful data structures - binary
- heaps - is markedly different than those of most of the
- others.</p>
-
- <p><a href="pq_design.html#pq_traits">Design::Priority
- Queues::Traits</a> discusses this further.</p>
-
- <h3><a name="pq_binary_heap" id="pq_binary_heap">Binary Heap
- Implementation</a></h3>
-
- <p>Binary heaps are one of the most useful underlying
- data structures for priority queues. They are very efficient in
- terms of memory (since they don't require per-value structure
- metadata), and have the best amortized <tt>push</tt> and
- <tt>pop</tt> performance for primitive types (<i>e.g.</i>,
- <tt><b>int</b></tt>s).</p>
-
- <p>The STL's <tt>priority_queue</tt> implements this data
- structure as an adapter over a sequence, typically
- <tt>std::vector</tt> or <tt>std::deque</tt>, which correspond
- to Figures <a href="#pq_different_underlying_dss">Underlying
- Priority-Queue Data-Structures</a> A1 and A2, respectively.</p>
-
- <p>This is indeed an elegant example of the adapter concept and
- the algorithm/container/iterator decomposition (see [<a href=
- "references.html#nelson96stlpq">nelson96stlpql</a>]). There are
- possibly reasons, however, why a binary-heap priority queue
- would be better implemented as a container instead of a
- sequence adapter:</p>
-
- <ol>
- <li><tt>std::priority_queue</tt> cannot erase values from its
- adapted sequence (irrespective of the sequence type). This
- means that the memory use of an <tt>std::priority_queue</tt>
- object is always proportional to the maximal number of values
- it ever contained, and not to the number of values that it
- currently contains (see <a href=
- "priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a>); this implementation
- of binary heaps acts very differently than other underlying
- data structures (<i>e.g.</i>, pairing heaps).</li>
-
- <li>Some combinations of adapted sequences and value types
- are very inefficient or just don't make sense. If one uses
- <tt>std::priority_queue<std::vector<std::string>
- > ></tt>, for example, then not only will each
- operation perform a logarithmic number of
- <tt>std::string</tt> assignments, but, furthermore, any
- operation (including <tt>pop</tt>) can render the container
- useless due to exceptions. Conversely, if one uses
- <tt>std::priority_queue<std::deque<<b>int</b>> >
- ></tt>, then each operation uses incurs a logarithmic
- number of indirect accesses (through pointers) unnecessarily.
- It might be better to let the container make a conservative
- deduction whether to use the structure in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 or A2.</li>
-
- <li>There does not seem to be a systematic way to determine
- what exactly can be done with the priority queue.
-
- <ol>
- <li>If <tt>p</tt> is a priority queue adapting an
- <tt>std::vector</tt>, then it is possible to iterate over
- all values by using <tt>&p.top()</tt> and
- <tt>&p.top() + p.size()</tt>, but this will not work
- if <tt>p</tt> is adapting an <tt>std::deque</tt>; in any
- case, one cannot use <tt>p.begin()</tt> and
- <tt>p.end()</tt>. If a different sequence is adapted, it
- is even more difficult to determine what can be
- done.</li>
-
- <li>If <tt>p</tt> is a priority queue adapting an
- <tt>std::deque</tt>, then the reference return by
- <tt>p.top()</tt> will remain valid until it is popped,
- but if <tt>p</tt> adapts an <tt>std::vector</tt>, the
- next <tt>push</tt> will invalidate it. If a different
- sequence is adapted, it is even more difficult to
- determine what can be done.</li>
- </ol>
- </li>
-
- <li>Sequence-based binary heaps can still implement
- linear-time <tt>erase</tt> and <tt>modify</tt> operations.
- This means that if one needs, <i>e.g.</i>, to erase a small
- (say logarithmic) number of values, then one might still
- choose this underlying data structure. Using
- <tt>std::priority_queue</tt>, however, this will generally
- change the order of growth of the entire sequence of
- operations.</li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>move_to_front_lu_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>move_to_front_lu_policy</tt> Interface</h1>
-
- <p>A list-update policy that unconditionally moves elements to
- the front of the list.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/list_update_policy.hpp"><tt>list_update_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
-
- <p>This is used only for definitions, e.g., the size
- type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="null_lu_metadata.html"><span class=
-"c2"><tt>null_lu_metadata</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Metadata on which this functor operates.</p>
-
- <p>In this case, none.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_reference583863863" id=
-"metadata_reference583863863">metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p>Reference to metadata on which this functor
- operates.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Metadata Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#metadata_type2849297114"><tt>metadata_type</tt></a>
- <b>operator</b>()
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Creates a metadata object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- <b>operator</b>()
- (<a href=
-"#metadata_reference583863863"><tt>metadata_reference</tt></a> r_metadata) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Decides whether a metadata object should be moved to
- the front of the list.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Find Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Find Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges to about 20.</p>
-<p>The test measures the average find-time as a function of the
- number of values inserted. For <tt>pb_ds</tt>'s containers, it
- finds the secondary key from a container obtained from finding
- a primary key. For the native multimaps, it searches a range
- obtained using <tt>std::equal_range</tt> on a primary key.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_large.cc"><tt>multimap_text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 100 3 4 4)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the find-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_find_timing_test_large_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_find_timing_test_large_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_find_timing_test_large_s2p_tree">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_find_timing_test_large_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_find_timing_test_large_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_find_timing_test_large_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_find_timing_test_large_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_find_timing_test_large_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_find_timing_test_large_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_find_timing_test_large_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_find_timing_test_large_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_find_timing_test_large_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Find Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Find Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 400 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges from 1 to 5.</p>
-<p>The test measures the average find-time as a function of the
- number of values inserted. For <tt>pb_ds</tt>'s containers, it
- finds the secondary key from a container obtained from finding
- a primary key. For the native multimaps, it searches a range
- obtained using <tt>std::equal_range</tt> on a primary key.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_find_timing_small.cc"><tt>multimap_text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 400 1 1 6)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the find-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_find_timing_test_small_s2p_tree">
-<div id="NTG_assoc">
-<div id="NHG_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_find_timing_test_small_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: NHG Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_find_timing_test_small_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_find_timing_test_small_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_find_timing_test_small_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_find_timing_test_small_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_find_timing_test_small_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_find_timing_test_small_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_find_timing_test_small_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_find_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_find_timing_test_small_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types find timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_find_timing_test_small_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_find_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_find_timing_test_small_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types find timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash-List "Multimap" Text Memory Use Test with Large
- Average Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Memory Use Test with Large Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys. The test measures the memory use
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc"><tt>multimap_text_insert_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 100 200 2100 100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the memory scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_mem_usage_test_large_s2p_tree">
-<div id="NTG_assoc">
-<div id="NHG_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_mem_usage_test_large_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: NHG Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_mem_usage_test_large_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_mem_usage_test_large_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_mem_usage_test_large_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_mem_usage_test_large_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_mem_usage_test_large_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_mem_usage_test_large_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_mem_usage_test_large_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_mem_usage_test_large_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_mem_usage_test_large_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_mem_usage_test_large_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Hash-List "Multimap" Text Memory Use Test with Small
- Average Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Memory Use Test with Small Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges to about 20.</p>
-<p>The test measures the memory use as a function of the number
- of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc"><tt>multimap_text_insert_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 100 3 4 4)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the memory scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_mem_usage_test_small_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_mem_usage_test_small_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_mem_usage_test_small_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_mem_usage_test_small_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_mem_usage_test_small_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_mem_usage_test_small_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_mem_usage_test_small_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_mem_usage_test_small_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_mem_usage_test_small_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_mem_usage_test_small_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types mem usage test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_mem_usage_test_small_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_mem_usage_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_mem_usage_test_small_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types mem usage test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Insert Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Insert Timing Test with Large Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 100 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges to about 20.</p>
-<p>The test measures the memory use as a function of the number
- of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc"><tt>multimap_text_insert_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 400 1 6 6)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the insert-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Mapping Semantics</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_timing_test_large_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_timing_test_large_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_timing_test_large_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_timing_test_large_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_timing_test_large_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_timing_test_large_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_timing_test_large_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_timing_test_large_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_timing_test_large_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_timing_test_large_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_timing_test_large_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL__Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_timing_test_large_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>"Multimap" Text Insert Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>"Multimap" Text Insert Timing Test with Small Average
- Secondary-Key to Primary-Key Ratio</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of pairs into a container. The
- first item of each pair is a string from an arbitrary text
- [<a href="references.html#wickland96thirty">wickland96thirty</a>], and
- the second is a uniform i.i.d.integer. The container is a
- "multimap" - it considers the first member of each pair as a
- primary key, and the second member of each pair as a secondary
- key (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>). There
- are 400 distinct primary keys, and the ratio of secondary keys
- to primary keys ranges from 1 to 5.</p>
-<p>The test measures the average insert-time as a function of
- the number of values inserted. For <tt>pb_ds</tt>'s containers,
- it inserts a primary key into the primary associative
- container, then a secondary key into the secondary associative
- container. For the native multimaps, it obtains a range using
- <tt>std::equal_range</tt>, and inserts a value only if it was
- not contained already.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_timing_small.cc"><tt>multimap_text_insert_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 400 1 1 6)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the insert-time scalability of different
- "multimap" designs (see <a href="motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for "multimaps" which
- use a tree-based container for primary keys, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NHG"></a>NHG, <a href="#NHM">NHM</a>, and <a href="#NHL">NHL</a> show the results for
- "multimaps" which use a hash-based container for primary keys,
- in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>,
- and <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_multimap_text_insert_timing_test_small_s2p_tree">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="multimap_text_insert_timing_test_small_s2p_tree_gcc.png" alt="no image" /></a></h6>NTG: Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_multimap_text_insert_timing_test_small_s2p_tree">
-<div id="NTM_assoc">
-<div id="NHM_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="multimap_text_insert_timing_test_small_s2p_tree_msvc.png" alt="no image" /></a></h6>NTM: NHM Native and primary tree-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_mmap-
-<tt>std::multimap</tt></li>
-<li>
-rb_tree_mmap_lu_mtf_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_multimap_text_insert_timing_test_small_s2p_tree">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_primary_tree-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="multimap_text_insert_timing_test_small_s2p_tree_local.png" alt="no image" /></a></h6>NTL: Native and primary tree-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHG_res_div">
-<div id="NHG_gcc">
-<div id="NHG_multimap_text_insert_timing_test_small_s2p_hash">
-<div id="NHG_assoc">
-<div id="NHG_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHG" id="NHG"><img src="multimap_text_insert_timing_test_small_s2p_hash_gcc.png" alt="no image" /></a></h6>NHG: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_hash_mmap-
-<tt>__gnucxx::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHM_res_div">
-<div id="NHM_msvc">
-<div id="NHM_multimap_text_insert_timing_test_small_s2p_hash">
-<div id="NHM_assoc">
-<div id="NHM_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHM" id="NHM"><img src="multimap_text_insert_timing_test_small_s2p_hash_msvc.png" alt="no image" /></a></h6>NHM: Native and primary hash-based multimap types insert timing test - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i></li>
-<li>
-n_hash_mmap-
-<tt>stdext::hash_multimap</tt></li>
-<li>
-cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_mmap_lu_mtf_set-
-<a href="cc_hash_table.html"><tt>cc_hash_table</tt></a>
-with <tt>Comb_Hash_Fn</tt> = <a href="direct_mask_range_hashing.html"><tt>direct_mask_range_hashing</tt></a>
-, and <tt>Resize_Policy</tt> = <a href="hash_standard_resize_policy.html"><tt>hash_standard_resize_policy</tt></a>
- with <tt>Size_Policy</tt> = <a href="hash_exponential_size_policy.html"><tt>hash_exponential_size_policy</tt></a>
-, and <tt>Trigger_Policy</tt> = <a href="hash_load_check_resize_trigger.html"><tt>hash_load_check_resize_trigger</tt></a>
- with <i>α<sub>min</sub></i> = <i>1/8</i> and <i>α<sub>max</sub></i> = <i>1/2</i>, mapping each key to <a href="list_update.html"><tt>list_update</tt></a>
- with <tt>Update_Policy</tt> = <a href="move_to_front_lu_policy.html"><tt>move_to_front_lu_policy</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NHL_res_div">
-<div id="NHL_local">
-<div id="NHL_multimap_text_insert_timing_test_small_s2p_hash">
-<div id="NHL_assoc">
-<div id="NHL_Native_and_primary_hash-based_multimap_types_insert_timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NHL" id= "NHL"><img src="multimap_text_insert_timing_test_small_s2p_hash_local.png" alt="no image" /></a></h6>NHL: Native and primary hash-based multimap types insert timing test - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>See <a href="assoc_performance_tests.html#msc">Observations::Mapping-Semantics
- Considerations</a>.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_hash_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_hash_fn</tt> Interface</h1>
-
- <p>A "null" hash function, indicating that the combining hash
- function is actually a ranged hash function.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy. See
- also <a href=
- "hash_based_containers.html#hash_policies">Design::Hash-Based
- Containers::Hash Policies</a>.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_lu_metadata Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_lu_metadata</tt> Interface</h1>
-
- <p>A null type that means that each link in a list-based
- container does not actually need metadata.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/list_update_policy.hpp"><tt>list_update_policy.hpp</tt></a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_mapped_type Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_mapped_type</tt> Interface</h1>
-
- <p>A mapped-policy indicating that an associative container is
- a "set"</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_probe_fn</tt> Interface</h1>
-
- <p>A "null" probe function, indicating that the combining probe
- function is actually a ranged probe function.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_tree_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_tree_node_update</tt> Interface</h1>
-
- <p>A "null" node updater, indicating that no node updates are
- required.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tree_policy.hpp"><tt>tree_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>null_trie_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>null_trie_node_update</tt> Interface</h1>
-
- <p>A "null" node updater, indicating that no node updates are
- required.</p>
-
- <p><a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> explains the concept of a null policy.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>ov_tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>ov_tree_tag</tt> Interface</h1>
-
- <p>Ordered-vector tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>pairing_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>pairing_heap_tag</tt> Interface</h1>
-
- <p>Pairing-heap data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>pat_trie_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>pat_trie_tag</tt> Interface</h1>
-
- <p>PATRICIA trie data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>point_invalidation_guarantee Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>point_invalidation_guarantee</tt> Interface</h1>
-
- <p>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.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_invalidation_guarantee.html"><span class=
-"c2"><tt>basic_invalidation_guarantee</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>container_traits Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>container_traits</tt> Interface</h1>
-
- <p>Traits of a priority-queue container based on its underlying
- data structure.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cntnr59189" id="Cntnr59189"><b>class</b> Cntnr</a>
-</pre>
- </td>
-
- <td>
- <p>Container type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Container Attributes</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="container_category1247973216" id=
-"container_category1247973216">container_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Underlying data structure.
-</pre>
- </td>
-
- <td>
- <p>Data structure category.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="invalidation_guarantee3793555937" id=
-"invalidation_guarantee3793555937">invalidation_guarantee</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Invalidation guarantee.
-</pre>
- </td>
-
- <td>
- <p>Invalidation-guarantee type.</p>
-
- <p>This is either <a href=
- "basic_invalidation_guarantee.html"><span class=
- "c2"><tt>basic_invalidation_guarantee</tt></span></a>,
- <a href="point_invalidation_guarantee.html"><span class=
- "c2"><tt>point_invalidation_guarantee</tt></span></a>, or
- <a href="range_invalidation_guarantee.html"><span class=
- "c2"><tt>range_invalidation_guarantee</tt></span></a></p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="split_join_can_throw3200477759" id=
-"split_join_can_throw3200477759">split_join_can_throw</a>
-</pre>
- </td>
-
- <td>
- <pre>
-True only if split or join operations can throw.
-</pre>
- </td>
-
- <td>
- <p>Split-join throw indicator.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Priority-Queues</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The priority-queue container has the following
- declaration:</p>
- <pre>
-<b>template</b><
- <b>typename</b> Value_Type,
- <b>typename</b> Cmp_Fn = std::less<Value_Type>,
- <b>typename</b> Tag = <a href="pairing_heap_tag.html">pairing_heap_tag</a>,
- <b>typename</b> Allocator = std::allocator<<b>char</b>> >
-<b>class</b> <a href="priority_queue.html">priority_queue</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Value_Type</tt> is the value type.</li>
-
- <li><tt>Cmp_Fn</tt> is a value comparison functor</li>
-
- <li><tt>Tag</tt> specifies which underlying data structure
- to use.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The <tt>Tag</tt> parameter specifies which underlying
- data structure to use. Instantiating it by <a href=
- "pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>,
- <a href=
- "binary_heap_tag.html"><tt>binary_heap_tag</tt></a>,
- <a href=
- "binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>,
- <a href=
- "rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>,
- or <a href=
- "thin_heap_tag.html"><tt>thin_heap_tag</tt></a>,
- specifies, respectively, an underlying pairing heap [<a href=
- "references.html#fredman86pairing">fredman86pairing</a>],
- binary heap [<a href="references.html#clrs2001">clrs2001</a>],
- binomial heap [<a href=
- "references.html#clrs2001">clrs2001</a>], a binomial heap with
- a redundant binary counter [<a href=
- "references.html#maverik_lowerbounds">maverik_lowerbounds</a>],
- or a thin heap [<a href=
- "references.html#kt99fat_heaps">kt99fat_heas</a>]. These are
- explained further in <a href="#pq_imp">Implementations</a>.</p>
-
- <p>As mentioned in <a href=
- "tutorial.html#pq">Tutorial::Priority Queues</a>,
- <a href=
- "priority_queue.html"><tt>__gnu_pbds::priority_queue</tt></a>
- shares most of the same interface with <tt>std::priority_queue</tt>.
- <i>E.g.</i> if <tt>q</tt> is a priority queue of type
- <tt>Q</tt>, then <tt>q.top()</tt> will return the "largest"
- value in the container (according to <tt><b>typename</b>
- Q::cmp_fn</tt>). <a href=
- "priority_queue.html"><tt>__gnu_pbds::priority_queue</tt></a>
- has a larger (and very slightly different) interface than
- <tt>std::priority_queue</tt>, however, since typically
- <tt>push</tt> and <tt>pop</tt> are deemed insufficient for
- manipulating priority-queues. </p>
-
- <p>Different settings require different priority-queue
- implementations which are described in <a href=
- "#pq_imp">Implementations</a>; <a href="#pq_traits">Traits</a>
- discusses ways to differentiate between the different traits of
- different implementations.</p>
-
- <h2><a name="pq_it" id="pq_it">Iterators</a></h2>
-
- <p>There are many different underlying-data structures for
- implementing priority queues. Unfortunately, most such
- structures are oriented towards making <tt>push</tt> and
- <tt>top</tt> efficient, and consequently don't allow efficient
- access of other elements: for instance, they cannot support an efficient
- <tt>find</tt> method. In the use case where it
- is important to both access and "do something with" an
- arbitrary value, one would be out of luck. For example, many graph algorithms require
- modifying a value (typically increasing it in the sense of the
- priority queue's comparison functor).</p>
-
- <p>In order to access and manipulate an arbitrary value in a
- priority queue, one needs to reference the internals of the
- priority queue from some form of an associative container -
- this is unavoidable. Of course, in order to maintain the
- encapsulation of the priority queue, this needs to be done in a
- way that minimizes exposure to implementation internals.</p>
-
- <p>In <tt>pb_ds</tt> the priority queue's <tt>insert</tt>
- method returns an iterator, which if valid can be used for subsequent <tt>modify</tt> and
- <tt>erase</tt> operations. This both preserves the priority
- queue's encapsulation, and allows accessing arbitrary values (since the
- returned iterators from the <tt>push</tt> operation can be
- stored in some form of associative container).</p>
-
- <p>Priority queues' iterators present a problem regarding their
- invalidation guarantees. One assumes that calling
- <tt><b>operator</b>++</tt> on an iterator will associate it
- with the "next" value. Priority-queues are
- self-organizing: each operation changes what the "next" value
- means. Consequently, it does not make sense that <tt>push</tt>
- will return an iterator that can be incremented - this can have
- no possible use. Also, as in the case of hash-based containers,
- it is awkward to define if a subsequent <tt>push</tt> operation
- invalidates a prior returned iterator: it invalidates it in the
- sense that its "next" value is not related to what it
- previously considered to be its "next" value. However, it might not
- invalidate it, in the sense that it can be
- de-referenced and used for <tt>modify</tt> and <tt>erase</tt>
- operations.</p>
-
- <p>Similarly to the case of the other unordered associative
- containers, <tt>pb_ds</tt> uses a distinction between
- point-type and range type iterators. A priority queue's <tt>iterator</tt> can always be
- converted to a <tt>point_iterator</tt>, and a
- <tt>const_iterator</tt> can always be converted to a
- <tt>const_point_iterator</tt>.</p>
-
- <p>The following snippet demonstrates manipulating an arbitrary
- value:</p>
- <pre>
-<i>// A priority queue of integers.</i>
-<a href=
-"priority_queue.html">priority_queue</a><<b>int</b>> p;
-
-<i>// Insert some values into the priority queue.</i>
-<a href=
-"priority_queue.html">priority_queue</a><<b>int</b>>::point_iterator it = p.push(0);
-
-p.push(1);
-p.push(2);
-
-<i>// Now modify a value.</i>
-p.modify(it, 3);
-
-assert(p.top() == 3);
-</pre>
-
- <p>(<a href="pq_examples.html#xref">Priority Queue
- Examples::Cross-Referencing</a> shows a more detailed
- example.)</p>
-
- <p>It should be noted that an alternative design could embed an
- associative container in a priority queue. Could, but most probably should not. To begin with, it should be noted that one
- could always encapsulate a priority queue and an associative
- container mapping values to priority queue iterators with no
- performance loss. One cannot, however, "un-encapsulate" a
- priority queue embedding an associative container, which might
- lead to performance loss. Assume, that one needs to
- associate each value with some data unrelated to priority
- queues. Then using <tt>pb_ds</tt>'s design, one could use an
- associative container mapping each value to a pair consisting
- of this data and a priority queue's iterator. Using the
- embedded method would need to use two associative
- containers. Similar problems might arise in cases where a value
- can reside simultaneously in many priority queues.</p>
-
- <h2><a name="pq_imp" id="pq_imp">Implementations</a></h2>
-
- <p>There are three main implementations of priority queues: the
- first employs a binary heap, typically one which uses a
- sequence; the second uses a tree (or forest of trees), which is
- typically less structured than an associative container's tree;
- the third simply uses an associative container. These are
- shown, respectively, in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 and A2, Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B, and Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> C.</p>
-
- <h6 class="c1"><a name="pq_different_underlying_dss" id=
- "pq_different_underlying_dss"><img src=
- "pq_different_underlying_dss.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Underlying Priority-Queue Data-Structures.</h6>
-
- <p>Roughly speaking, any value that is both pushed and popped
- from a priority queue must incur a logarithmic expense (in the
- amortized sense). Any priority queue implementation that would
- avoid this, would violate known bounds on comparison-based
- sorting (see, <i>e.g.</i>, [<a href=
- "references.html#clrs2001">clrs2001</a>] and <a href=
- "references.html#brodal96priority">brodal96priority</a>]).</p>
-
- <p>Most implementations do
- not differ in the asymptotic amortized complexity of
- <tt>push</tt> and <tt>pop</tt> operations, but they differ in
- the constants involved, in the complexity of other operations
- (<i>e.g.</i>, <tt>modify</tt>), and in the worst-case
- complexity of single operations. In general, the more
- "structured" an implementation (<i>i.e.</i>, the more internal
- invariants it possesses) - the higher its amortized complexity
- of <tt>push</tt> and <tt>pop</tt> operations.</p>
-
- <p><tt>pb_ds</tt> implements different algorithms using a
- single class: <a href="priority_queue.html">priority_queue</a>.
- Instantiating the <tt>Tag</tt> template parameter, "selects"
- the implementation:</p>
-
- <ol>
- <li>Instantiating <tt>Tag = <a href=
- "binary_heap_tag.html">binary_heap_tag</a></tt> creates
- a binary heap of the form in Figures <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 or A2. The former is internally
- selected by <a href="priority_queue.html">priority_queue</a>
- if <tt>Value_Type</tt> is instantiated by a primitive type
- (<i>e.g.</i>, an <tt><b>int</b></tt>); the latter is
- internally selected for all other types (<i>e.g.</i>,
- <tt>std::string</tt>). This implementations is relatively
- unstructured, and so has good <tt>push</tt> and <tt>pop</tt>
- performance; it is the "best-in-kind" for primitive
- types, <i>e.g.</i>, <tt><b>int</b></tt>s. Conversely, it has
- high worst-case performance, and can support only linear-time
- <tt>modify</tt> and <tt>erase</tt> operations; this is
- explained further in <a href="#pq_traits">Traits</a>.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "pairing_heap_tag.html">pairing_heap_tag</a></tt>
- creates a pairing heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B. This implementations too is relatively
- unstructured, and so has good <tt>push</tt> and <tt>pop</tt>
- performance; it is the "best-in-kind" for non-primitive
- types, <i>e.g.</i>, <tt>std:string</tt>s. It also has very
- good worst-case <tt>push</tt> and <tt>join</tt> performance
- (<i>O(1)</i>), but has high worst-case <tt>pop</tt>
- complexity.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "binomial_heap_tag.html">binomial_heap_tag</a></tt>
- creates a binomial heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B. This implementations is more
- structured than a pairing heap, and so has worse
- <tt>push</tt> and <tt>pop</tt> performance. Conversely, it
- has sub-linear worst-case bounds for <tt>pop</tt>,
- <i>e.g.</i>, and so it might be preferred in cases where
- responsiveness is important.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "rc_binomial_heap_tag.html">rc_binomial_heap_tag</a></tt>
- creates a binomial heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B, accompanied by a redundant counter
- which governs the trees. This implementations is therefore
- more structured than a binomial heap, and so has worse
- <tt>push</tt> and <tt>pop</tt> performance. Conversely, it
- guarantees <i>O(1)</i> <tt>push</tt> complexity, and so it
- might be preferred in cases where the responsiveness of a
- binomial heap is insufficient.</li>
-
- <li>Instantiating <tt>Tag = <a href=
- "thin_heap_tag.html">thin_heap_tag</a></tt> creates a
- thin heap of the form in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> B. This implementations too is more
- structured than a pairing heap, and so has worse
- <tt>push</tt> and <tt>pop</tt> performance. Conversely, it
- has better worst-case and identical amortized complexities
- than a Fibonacci heap, and so might be more appropriate for
- some graph algorithms.</li>
- </ol>
-
- <p><a href="pq_performance_tests.html">Priority-Queue
- Performance Tests</a> shows some results for the above, and
- discusses these points further.</p>
-
- <p>Of course, one can use any order-preserving associative
- container as a priority queue, as in Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> C, possibly by creating an adapter class
- over the associative container (much as
- <tt>std::priority_queue</tt> can adapt <tt>std::vector</tt>).
- This has the advantage that no cross-referencing is necessary
- at all; the priority queue itself is an associative container.
- Most associative containers are too structured to compete with
- priority queues in terms of <tt>push</tt> and <tt>pop</tt>
- performance.</p>
-
- <h2><a name="pq_traits" id="pq_traits">Traits</a></h2>
-
- <p>It would be nice if all priority queues could
- share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining
- two binary heaps might throw an exception (not corrupt
- any of the heaps on which it operates), but joining two pairing
- heaps is exception free.</p>
-
- <p>Tags and traits are very useful for manipulating generic
- types. <a href=
- "priority_queue.html"><tt>__gnu_pbds::priority_queue</tt></a>
- publicly defines <tt>container_category</tt> as one of the tags
- discussed in <a href="#pq_imp">Implementations</a>. Given any
- container <tt>Cntnr</tt>, the tag of the underlying
- data structure can be found via <tt><b>typename</b>
- Cntnr::container_category</tt>; this is one of the types shown in
- Figure <a href="#pq_tag_cd">Data-structure tag class
- hierarchy</a>.</p>
-
- <h6 class="c1"><a name="pq_tag_cd" id=
- "pq_tag_cd"><img src="priority_queue_tag_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Data-structure tag class hierarchy.</h6>
-
- <p>Additionally, a traits mechanism can be used to query a
- container type for its attributes. Given any container
- <tt>Cntnr</tt>, then <tt><a href=
- "assoc_container_traits.html">__gnu_pbds::container_traits</a><Cntnr></tt>
- is a traits class identifying the properties of the
- container.</p>
-
- <p>To find if a container might throw if two of its objects are
- joined, one can use <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt><Cntnr>::split_join_can_throw</tt>,
- for example.</p>
-
- <p>Different priority-queue implementations have different invalidation guarantees. This is
- especially important, since as explained in <a href=
- "#pq_it">Iterators</a>, there is no way to access an arbitrary
- value of priority queues except for iterators. Similarly to
- associative containers, one can use
- <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt><Cntnr>::invalidation_guarantee</tt>
- to get the invalidation guarantee type of a priority queue.</p>
-
- <p>It is easy to understand from Figure <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a>, what <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a><tt><Cntnr>::invalidation_guarantee</tt>
- will be for different implementations. All implementations of
- type <a href="#pq_different_underlying_dss">Underlying
- Priority-Queue Data-Structures</a> B have <a href=
- "point_invalidation_guarantee.html"><tt>point_invalidation_guarantee</tt></a>:
- the container can freely internally reorganize the nodes -
- range-type iterators are invalidated, but point-type iterators
- are always valid. Implementations of type <a href=
- "#pq_different_underlying_dss">Underlying Priority-Queue
- Data-Structures</a> A1 and A2 have <a href=
- "basic_invalidation_guarantee.html"><tt>basic_invalidation_guarantee</tt></a>:
- the container can freely internally reallocate the array - both
- point-type and range-type iterators might be invalidated.</p>
-
- <p>This has major implications, and constitutes a good reason to avoid
- using binary heaps. A binary heap can perform <tt>modify</tt>
- or <tt>erase</tt> efficiently <u>given a valid point-type
- iterator</u>. However, inn order to supply it with a valid point-type
- iterator, one needs to iterate (linearly) over all
- values, then supply the relevant iterator (recall that a
- range-type iterator can always be converted to a point-type
- iterator). This means that if the number of <tt>modify</tt> or
- <tt>erase</tt> operations is non-negligible (say
- super-logarithmic in the total sequence of operations) - binary
- heaps will perform badly.</p>
- <pre>
-
-</pre>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Examples</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Examples</h1>
-
- <h2><a name="basic_usage" id="basic_usage">Basic Use</a></h2>
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc"><tt>basic_priority_queue.cc</tt></a>
- Basic use of priority queues.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_split_join.cc"><tt>priority_queue_split_join.cc</tt></a>
- Splitting and joining priority queues.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_erase_if.cc"><tt>priority_queue_erase_if.cc</tt></a>
- Conditionally erasing values from a container object.</li>
- </ol>
-
- <h2><a name="generics" id="generics">Generics</a></h2>
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_container_traits.cc"><tt>priority_queue_container_traits.cc</tt></a>
- Using <a href="assoc_container_traits.html"><tt>container_traits</tt></a>
- to query about underlying data structure behavior.</li>
- </ol>
-
- <h2><a name="xref" id="xref">Cross Referencing</a></h2>
-
-
- <ol>
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_xref.cc"><tt>priority_queue_xref.cc</tt></a>
- Cross referencing an associative container and a priority
- queue.</li>
-
- <li><a href= "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/priority_queue_dijkstra.cc"><tt>priority_queue_dijkstra.cc</tt></a>
- Cross referencing a vector and a priority queue using a
- <u>very</u> simple version of Dijkstra's shortest path
- algorithm.</li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority-Queue Performance Tests</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority-Queue Performance Tests</h1>
-<h2><a name="settings" id="settings">Settings</a></h2>
-<p>This section describes performance tests and their results.
- In the following, <a href="#gcc"><u>g++</u></a>, <a href="#msvc"><u>msvc++</u></a>, and <a href="#local"><u>local</u></a> (the build used for generating this
- documentation) stand for three different builds:</p>
-<div id="gcc_settings_div">
-<div class="c1">
-<h3><a name="gcc" id="gcc"><u>g++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.644</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform -
- Linux-2.6.12-9-386-i686-with-debian-testing-unstable</li>
-<li>Compiler - g++ (GCC) 4.0.2 20050808 (prerelease)
- (Ubuntu 4.0.1-4ubuntu9) Copyright (C) 2005 Free Software
- Foundation, Inc. This is free software; see the source
- for copying conditions. There is NO warranty; not even
- for MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="msvc_settings_div">
-<div class="c1">
-<h3><a name="msvc" id="msvc"><u>msvc++</u></a></h3>
-<ul>
-<li>CPU speed - cpu MHz : 2660.554</li>
-<li>Memory - MemTotal: 484412 kB</li>
-<li>Platform - Windows XP Pro</li>
-<li>Compiler - Microsoft (R) 32-bit C/C++ Optimizing
- Compiler Version 13.10.3077 for 80x86 Copyright (C)
- Microsoft Corporation 1984-2002. All rights
- reserved.</li>
-</ul>
-</div>
-<div class="c2"></div>
-</div>
-<div id="local_settings_div"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h3><a name = "local"><u>local</u></a></h3><ul>
-<li>CPU speed - cpu MHz : 2250.000</li>
-<li>Memory - MemTotal: 2076248 kB</li>
-<li>Platform - Linux-2.6.16-1.2133_FC5-i686-with-redhat-5-Bordeaux</li>
-<li>Compiler - g++ (GCC) 4.1.1 20060525 (Red Hat 4.1.1-1)
-Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-</li>
-</ul>
-</div><div style = "width: 100%; height: 20px"></div></div>
-<h2><a name="pq_tests" id="pq_tests">Tests</a></h2>
-<ol>
-<li><a href="priority_queue_text_push_timing_test.html">Priority Queue
- Text <tt>push</tt> Timing Test</a></li>
-<li><a href="priority_queue_text_push_pop_timing_test.html">Priority
- Queue Text <tt>push</tt> and <tt>pop</tt> Timing
- Test</a></li>
-<li><a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a></li>
-<li><a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a></li>
-<li><a href="priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a></li>
-<li><a href="priority_queue_text_join_timing_test.html">Priority Queue
- Text <tt>join</tt> Timing Test</a></li>
-<li><a href="priority_queue_text_modify_up_timing_test.html">Priority
- Queue Text <tt>modify</tt> Timing Test - I</a></li>
-<li><a href="priority_queue_text_modify_down_timing_test.html">Priority
- Queue Text <tt>modify</tt> Timing Test - II</a></li>
-</ol>
-<h2><a name="pq_observations" id="pq_observations">Observations</a></h2>
-<h3><a name="pq_observations_cplx" id="pq_observations_cplx">Underlying Data Structures
- Complexity</a></h3>
-<p>The following table shows the complexities of the different
- underlying data structures in terms of orders of growth. It is
- interesting to note that this table implies something about the
- constants of the operations as well (see <a href="#pq_observations_amortized_push_pop">Amortized <tt>push</tt>
- and <tt>pop</tt> operations</a>).</p>
-<table class="c1" width="100%" border="1" summary="pq complexities">
-<tr>
-<td align="left"></td>
-<td align="left"><tt>push</tt></td>
-<td align="left"><tt>pop</tt></td>
-<td align="left"><tt>modify</tt></td>
-<td align="left"><tt>erase</tt></td>
-<td align="left"><tt>join</tt></td>
-</tr>
-<tr>
-<td align="left">
-<p><tt>std::priority_queue</tt></p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n)) Worst</p>
-</td>
-<td align="left">
-<p><i>Theta;(n log(n))</i> Worst</p>
-<p><sub><a href="#std_mod1">[std note 1]</a></sub></p>
-</td>
-<td align="left">
-<p class="c3">Θ(n log(n))</p>
-<p><sub><a href="#std_mod2">[std note 2]</a></sub></p>
-</td>
-<td align="left">
-<p class="c3">Θ(n log(n))</p>
-<p><sub><a href="#std_mod1">[std note 1]</a></sub></p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">Θ(n)</p>
-</td>
-<td align="left">
-<p class="c1">Θ(n)</p>
-</td>
-<td align="left">
-<p class="c1">Θ(n)</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p><i>Θ(log(n))</i> worst</p>
-<p><i>O(1)</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-<td align="left">
-<p class="c1">Θ(log(n))</p>
-</td>
-</tr>
-<tr>
-<td align="left">
-<p><a href="priority_queue.html"><tt>priority_queue</tt></a></p>
-<p>with <tt>Tag</tt> =</p>
-<p><a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a></p>
-</td>
-<td align="left">
-<p class="c1">O(1)</p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p><i>Θ(log(n))</i> worst</p>
-<p><i>O(1)</i> amortized,</p>or
-
- <p><i>Θ(log(n))</i> amortized</p>
-<p><sub><a href="#thin_heap_note">[thin_heap_note]</a></sub></p>
-</td>
-<td align="left">
-<p><i>Θ(n)</i> worst</p>
-<p><i>Θ(log(n))</i> amortized</p>
-</td>
-<td align="left">
-<p class="c1">Θ(n)</p>
-</td>
-</tr>
-</table>
-<p><sub><a name="std_mod1" id="std_mod1">[std note 1]</a> This
- is not a property of the algorithm, but rather due to the fact
- that the STL's priority queue implementation does not support
- iterators (and consequently the ability to access a specific
- value inside it). If the priority queue is adapting an
- <tt>std::vector</tt>, then it is still possible to reduce this
- to <i>Θ(n)</i> by adapting over the STL's adapter and
- using the fact that <tt>top</tt> returns a reference to the
- first value; if, however, it is adapting an
- <tt>std::deque</tt>, then this is impossible.</sub></p>
-<p><sub><a name="std_mod2" id="std_mod2">[std note 2]</a> As
- with <a href="#std_mod1">[std note 1]</a>, this is not a
- property of the algorithm, but rather the STL's implementation.
- Again, if the priority queue is adapting an
- <tt>std::vector</tt> then it is possible to reduce this to
- <i>Θ(n)</i>, but with a very high constant (one must call
- <tt>std::make_heap</tt> which is an expensive linear
- operation); if the priority queue is adapting an
- <tt>std::dequeu</tt>, then this is impossible.</sub></p>
-<p><sub><a name="thin_heap_note" id="thin_heap_note">[thin_heap_note]</a> A thin heap has
- <i>&Theta(log(n))</i> worst case <tt>modify</tt> time
- always, but the amortized time depends on the nature of the
- operation: I) if the operation increases the key (in the sense
- of the priority queue's comparison functor), then the amortized
- time is <i>O(1)</i>, but if II) it decreases it, then the
- amortized time is the same as the worst case time. Note that
- for most algorithms, I) is important and II) is not.</sub></p>
-<h3><a name="pq_observations_amortized_push_pop" id="pq_observations_amortized_push_pop">Amortized <tt>push</tt>
- and <tt>pop</tt> operations</a></h3>
-<p>In many cases, a priority queue is needed primarily for
- sequences of <tt>push</tt> and <tt>pop</tt> operations. All of
- the underlying data structures have the same amortized
- logarithmic complexity, but they differ in terms of
- constants.</p>
-<p>The table above shows that the different data structures are
- "constrained" in some respects. In general, if a data structure
- has lower worst-case complexity than another, then it will
- perform slower in the amortized sense. Thus, for example a
- redundant-counter binomial heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>)
- has lower worst-case <tt>push</tt> performance than a binomial
- heap (<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>),
- and so its amortized <tt>push</tt> performance is slower in
- terms of constants.</p>
-<p>As the table shows, the "least constrained" underlying
- data structures are binary heaps and pairing heaps.
- Consequently, it is not surprising that they perform best in
- terms of amortized constants.</p>
-<ol>
-<li>Pairing heaps seem to perform best for non-primitive
- types (<i>e.g.</i>, <tt>std::string</tt>s), as shown by
- <a href="priority_queue_text_push_timing_test.html">Priority
- Queue Text <tt>push</tt> Timing Test</a> and <a href="priority_queue_text_push_pop_timing_test.html">Priority
- Queue Text <tt>push</tt> and <tt>pop</tt> Timing
- Test</a></li>
-<li>binary heaps seem to perform best for primitive types
- (<i>e.g.</i>, <tt><b>int</b></tt>s), as shown by <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a> and
- <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a>.</li>
-</ol>
-<h3><a name="pq_observations_graph" id="pq_observations_graph">Graph Algorithms</a></h3>
-<p>In some graph algorithms, a decrease-key operation is
- required [<a href="references.html#clrs2001">clrs2001</a>];
- this operation is identical to <tt>modify</tt> if a value is
- increased (in the sense of the priority queue's comparison
- functor). The table above and <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a> show that a thin heap
- (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>)
- outperforms a pairing heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> =<tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>),
- but the rest of the tests show otherwise.</p>
-<p>This makes it difficult to decide which implementation to
- use in this case. Dijkstra's shortest-path algorithm, for
- example, requires <i>Θ(n)</i> <tt>push</tt> and
- <tt>pop</tt> operations (in the number of vertices), but
- <i>O(n<sup>2</sup>)</i> <tt>modify</tt> operations, which can
- be in practice <i>Θ(n)</i> as well. It is difficult to
- find an <i>a-priori</i> characterization of graphs in which the
- <u>actual</u> number of <tt>modify</tt> operations will dwarf
- the number of <tt>push</tt> and <tt>pop</tt> operations.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Priority-Queue Regression Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Regression Tests</h1>
-
- <h2><a name="assoc_desc" id="assoc_desc">Description</a></h2>
-
- <p>The library contains a single comprehensive regression test.
- For a given container type in <tt>pb_ds</tt>, the test creates
- an object of the container type and an object of the
- corresponding STL type (<i>i.e.</i>,
- <tt>std::priority_queue</tt>). It then performs a random
- sequence of methods with random arguments (<i>e.g.</i>, pushes,
- pops, and so forth) on both objects. At each operation, the
- test checks the return value of the method, and optionally both
- compares <tt>pb_ds</tt>'s object with the STL's object as well
- as performing other consistency checks on <tt>pb_ds</tt>'s
- object (<i>e.g.</i>, that the size returned by the
- <tt>size</tt> method corresponds to the distance between its
- <tt>begin</tt> and end iterators).</p>
-
- <p>Additionally, the test integrally checks exception safety
- and resource leaks. This is done as follows. A special
- allocator type, written for the purpose of the test, both
- randomly throws an exceptions when allocations are performed,
- and tracks allocations and de-allocations. The exceptions thrown
- at allocations simulate memory-allocation failures; the
- tracking mechanism checks for memory-related bugs (<i>e.g.</i>,
- resource leaks and multiple de-allocations). Both
- <tt>pb_ds</tt>'s containers and the containers' value-types are
- configured to use this allocator.</p>
-
- <h2><a name="pq_tests" id="pq_tests">Tests</a></h2>
-
- <p><a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc"><tt>priority_queue_rand.cc</tt></a>
- checks all priority queue types.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Priority-Queue Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Priority-Queue Tests</h1>
-
- <p><a href="pq_regression_tests.html">Priority-Queue Regression
- Tests</a> describes the regression tests; <a href=
- "pq_performance_tests.html">Priority-Queue Performance
- Tests</a> describes the performance tests.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Prerequisites</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Usage Prerequisites</h1>
-
- <p><tt>pb_ds</tt> has been successfully tested with the
- following compilers:</p>
-
- <ol>
- <li>g++ 3.3.1, 3.4.4, 4.0, 4.1, and what will be 4.2</li>
-
- <li>Intel icpc 8.1 and 9</li>
-
- <li>Visual C++ .Net 2005</li>
- </ol>
-
- <p>The library contains only header files, and does not require
- any other libraries except the STL. All classes are defined in
- <tt><b>namespace</b> pb_ds</tt>. The library internally uses
- macros beginning with <tt>PB_DS</tt> (<i>e.g.</i>, for header
- guards), but <tt>#<b>undef</b></tt>s anything it
- <tt>#<b>define</b></tt>s (except for header guards). Compiling
- the library in an environment where macros beginning in
- <tt>PB_DS</tt> are defined, may yield unpredictable results in
- compilation, execution, or both.</p>
-
- <p> Further dependencies are necessary to create the visual output
- for the performance tests. To create these graphs, two additional
- packages will be needed: <b>pychart</b> and <b>Beautiful
- Soup</b>. Both are freely available.
- </p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>priority_queue Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>priority_queue</tt> Interface</h1>
-
- <p>Basic priority queue.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/priority_queue.hpp"><tt>priority_queue.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Value_Type216514186" id=
-"Value_Type216514186"><b>typename</b> Value_Type</a>
-</pre>
- </td>
-
- <td>
- <p>Value type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>
- <pre>
-std::less<<a href=
-"#Value_Type216514186"><tt>Value_Type</tt></a>>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag </a>
-</pre>
- </td>
-
- <td>
- <p>Data-structure tag.</p>
- </td>
-
- <td><a href="pairing_heap_tag.html"><span class=
- "c2"><tt>pairing_heap_tag</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="difference_type868028452" id=
-"difference_type868028452">difference_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::difference_type
-</pre>
- </td>
-
- <td>
- <p>Difference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Categories</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="container_category1247973216" id=
-"container_category1247973216">container_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Tag278938"><tt>Tag</tt></a>
-</pre>
- </td>
-
- <td>
- <p>The underlying mapped-structure tag of the
- container.</p>
-
- <p>This is one of:</p>
-
- <ol>
- <li><a href="binary_heap_tag.html"><span class=
- "c2"><tt>binary_heap_tag</tt></span></a></li>
-
- <li><a href="binomial_heap_tag.html"><span class=
- "c2"><tt>binomial_heap_tag</tt></span></a></li>
-
- <li><a href="rc_binomial_heap_tag.html"><span class=
- "c2"><tt>rc_binomial_heap_tag</tt></span></a></li>
-
- <li><a href="pairing_heap_tag.html"><span class=
- "c2"><tt>pairing_heap_tag</tt></span></a></li>
-
- <li><a href="thin_heap_tag.html"><span class=
- "c2"><tt>thin_heap_tag</tt></span></a></li>
- </ol>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="cmp_fn394495" id="cmp_fn394495">cmp_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Value_Type216514186"><tt>Value_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p>Value reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const value <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="pointer2179769" id="pointer2179769">pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::pointer
-</pre>
- </td>
-
- <td>
- <p>Value pointer type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#value_type279018186"><tt>value_type</tt></a>>::other::const_pointer
-</pre>
- </td>
-
- <td>
- <p>Const Value <a href=
- "#pointer2179769"><tt>pointer</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_point_iterator2364676009" id=
-"const_point_iterator2364676009">const_point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const point-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="point_iterator2789896775" id=
-"point_iterator2789896775">point_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Point-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Point-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Const range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Const range-type iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Range-type iterator.
-</pre>
- </td>
-
- <td>
- <p>Range-type iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- priority_queue
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- priority_queue
- (<b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- priority_queue
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s. The
- <a href="#value_type279018186"><tt>value_type</tt></a>s
- between <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- priority_queue
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s and some
- policy objects The <a href=
- "#value_type279018186"><tt>value_type</tt></a>s between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- priority_queue
- (<b>const</b> <span class=
-"c2"><tt>priority_queue</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~priority_queue
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>priority_queue</tt></span> &
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>priority_queue</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class="c2"><tt>priority_queue</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Information Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the number of distinct <a href=
- "#value_type279018186"><tt>value_type</tt></a> objects
- the container object is storing.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- max_size
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns an upper bound on the number of distinct
- <a href="#value_type279018186"><tt>value_type</tt></a>
- objects this container can store.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- empty
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns whether the container object is not storing
- any <a href=
- "#value_type279018186"><tt>value_type</tt></a>
- objects.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Insert Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a>
- push
- (<a href=
-"#const_reference495461441"><tt>const_reference</tt></a> r_val)
-</pre>
- </td>
-
- <td>
- <p>Inserts a <a href=
- "#value_type279018186"><tt>value_type</tt></a> object.
- returns a <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- object associated with the new pushed <span class=
- "c1"><tt>r_val</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link12" id="link12">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_reference495461441"><tt>const_reference</tt></a>
- top
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_reference495461441"><tt>const_reference</tt></a>
- of the largest <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container object, i.e., a <a href=
- "#value_type279018186"><tt>value_type</tt></a> v_max for
- which any other <a href=
- "#value_type279018186"><tt>value_type</tt></a> v in the
- container object will satisfy !<a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a>()(v_max, v).</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link13" id="link13">Modify Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- modify
- (<a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a> it,
- <a href=
-"#const_reference495461441"><tt>const_reference</tt></a> r_new_val)
-</pre>
- </td>
-
- <td>
- <p>Modifies the <a href=
- "#value_type279018186"><tt>value_type</tt></a> associated
- with the <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- <span class="c1"><tt>it</tt></span> into <span class=
- "c1"><tt>r_new_val</tt></span>.</p>
-
- <p>To use this method, <a href=
- "#value_type279018186"><tt>value_type</tt></a> must be
- assignable.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Erase Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- pop
- ()
-</pre>
- </td>
-
- <td>
- <p>Pops the largest <a href=
- "#value_type279018186"><tt>value_type</tt></a>.</p>
-
- <p>If the container object is empty, results are
- undefined.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- erase
- (<a href=
-"#point_iterator2789896775"><tt>point_iterator</tt></a> it)
-</pre>
- </td>
-
- <td>
- <p>Erases the <a href=
- "#value_type279018186"><tt>value_type</tt></a> associated
- with the <a href=
- "#point_iterator2789896775"><tt>point_iterator</tt></a>
- <span class="c1"><tt>it</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> Pred>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- erase_if
- (Pred prd)
-</pre>
- </td>
-
- <td>
- <p>Erases any <a href=
- "#value_type279018186"><tt>value_type</tt></a> satisfying
- the predicate <span class="c1"><tt>prd</tt></span>;
- returns the number of <a href=
- "#value_type279018186"><tt>value_type</tt></a>s
- erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- clear
- ()
-</pre>
- </td>
-
- <td>
- <p>Clears the container object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link15" id="link15">Split and join
- Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- join
- (<span class="c2"><tt>priority_queue</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Joins two container objects. When this function
- returns, <span class="c1"><tt>other</tt></span> will be
- empty.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> Pred>
-<b>inline</b> <b>void</b>
- split
- (Pred prd,
- <span class="c2"><tt>priority_queue</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Splits into two container objects. When this function
- returns, <span class="c1"><tt>other</tt></span> will be
- contain only values v for which <span class=
- "c1"><tt>prd</tt></span>(v) is <tt><b>true</b></tt>.</p>
-
- <p>When calling this method, <span class=
- "c1"><tt>other</tt></span>'s policies must be
- equivalent to this object's policies.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link16" id="link16">Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the first <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> corresponding
- to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a>
- corresponding to the just-after-last <a href=
- "#value_type279018186"><tt>value_type</tt></a> in the
- container.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Random Int Push Pop Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Random Integer <tt>push</tt> and
- <tt>pop</tt> Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with i.i.d. integer
- keys into a container using <tt>push</tt> , then removes them
- using <tt>pop</tt> . It measures the average time for
- <tt>push</tt> and <tt>pop</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc">
-<tt>priority_queue_random_int_push_pop_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> shows the results for the native
- priority queues and <tt>pb_ds</tt> 's priority queues in
- <a href="pq_performance_tests.html#gcc"><u>g++</u></a>,
- <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_random_int_push_pop_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt___tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_random_int_push_pop_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>push</tt> <tt>pop</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_random_int_push_pop_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt___tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_random_int_push_pop_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>push</tt> <tt>pop</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_random_int_push_pop_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt___tt_pop_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_random_int_push_pop_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>push</tt> <tt>pop</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Binary heaps are the most suited for sequences of
- <tt>push</tt> and <tt>pop</tt> operations of primitive types
- (<i>e.g.</i> <tt><b>int</b></tt>s). This is explained in
- <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Int <tt>push</tt> Timing Test</a> . (See <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> Timing Test</a> for the case of primitive
- types.)</p>
-<p>At first glance it seems that the STL's vector-based
- priority queue is approximately on par with <tt>pb_ds</tt>'s
- corresponding priority queue. There are two differences
- however:</p>
-<ol>
-<li>The STL's priority queue does not downsize the underlying
- vector (or deque) as the priority queue becomes smaller
- (see <a href="priority_queue_text_pop_mem_usage_test.html">Priority Queue
- Text <tt>pop</tt> Memory Use Test</a>). It is therefore
- gaining some speed at the expense of space.</li>
-<li>From <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a>, it seems that the STL's priority queue is slower in
- terms of <tt>pus</tt> operations. Since the number of
- <tt>pop</tt> operations is at most that of <tt>push</tt>
- operations, the test here is the "best" for the STL's
- priority queue.</li>
-</ol>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Random Int Push Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Random Integer <tt>push</tt> Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with i.i.d integer keys
- into a container using <tt>push</tt> . It measures the average
- time for <tt>push</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_random_int_push_timing.cc"><tt>
- priority_queue_random_intpush_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NBPG">NBPG</a>, <a href="#NBPM">NBPM</a>, and <a href="#NBPL">NBPL</a> shows the
- results for the binary-heap based native priority queues and
- <tt>pb_ds</tt> 's priority queues in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_random_int_push_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_random_int_push_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_random_int_push_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_random_int_push_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_random_int_push_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_random_int_push_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBPG_res_div">
-<div id="NBPG_gcc">
-<div id="NBPG_binary_priority_queue_random_int_push_timing_test">
-<div id="NBPG_pq">
-<div id="NBPG_Native_and__tt_pb_ds_455tt__binary_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBPG" id="NBPG"><img src="binary_priority_queue_random_int_push_timing_test_gcc.png" alt="no image" /></a></h6>NBPG: Native and <tt>pb ds</tt> binary priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBPM_res_div">
-<div id="NBPM_msvc">
-<div id="NBPM_binary_priority_queue_random_int_push_timing_test">
-<div id="NBPM_pq">
-<div id="NBPM_Native_and__tt_pb_ds_455tt__binary_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBPM" id="NBPM"><img src="binary_priority_queue_random_int_push_timing_test_msvc.png" alt="no image" /></a></h6>NBPM: Native and <tt>pb ds</tt> binary priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBPL_res_div">
-<div id="NBPL_local">
-<div id="NBPL_binary_priority_queue_random_int_push_timing_test">
-<div id="NBPL_pq">
-<div id="NBPL_Native_and__tt_pb_ds_455tt__binary_priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBPL" id= "NBPL"><img src="binary_priority_queue_random_int_push_timing_test_local.png" alt="no image" /></a></h6>NBPL: Native and <tt>pb ds</tt> binary priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Binary heaps are the most suited for sequences of
- <tt>push</tt> and <tt>pop</tt> operations of primitive types
- (<i>e.g.</i> <tt><b>int</b></tt>s). They are less constrained
- than any other type, and since it is very efficient to store
- such types in arrays, they outperform even pairing heaps. (See
- <a href="priority_queue_text_push_timing_test.html">Priority
- Queue Text <tt>push</tt> Timing Test</a> for the case of
- non-primitive types.)</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>priority_queue_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>priority_queue_tag</tt> Interface</h1>
-
- <p>Basic priority-queue data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="container_tag.html"><span class=
-"c2"><tt>container_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="11in"
- height="8.5in"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.43"
- version="1.0"
- sodipodi:docbase="/mnt/share/src/policy_based_data_structures/pb_ds_images"
- sodipodi:docname="pq_tag_diagram_2.svg"
- inkscape:export-filename="/mnt/share/src/policy_based_data_structures/pb_ds_images/pq_tag_diagram_2.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path3311"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
- transform="scale(0.4)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Sstart"
- style="overflow:visible">
- <path
- id="path3319"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(0.3,0,0,0.3,-1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Sstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Sstart"
- style="overflow:visible">
- <path
- id="path3337"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(0.2,0.2)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Send"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Send"
- style="overflow:visible">
- <path
- id="path3316"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.3,0,0,-0.3,1.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mend"
- style="overflow:visible">
- <path
- id="path3322"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-0.6,0,0,-0.6,3,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3346"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="scale(-0.8,-0.8)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lstart"
- style="overflow:visible">
- <path
- id="path3331"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(1.1,0,0,1.1,-5.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lend"
- style="overflow:visible">
- <path
- id="path3328"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2"
- inkscape:cx="608.69002"
- inkscape:cy="490.05621"
- inkscape:document-units="in"
- inkscape:current-layer="layer1"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1278"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
- gridtolerance="0.125in"
- guidetolerance="0.125in">
- <sodipodi:guide
- orientation="horizontal"
- position="629"
- id="guide1307" />
- <sodipodi:guide
- orientation="horizontal"
- position="449"
- id="guide1309" />
- <sodipodi:guide
- orientation="horizontal"
- position="269"
- id="guide1311" />
- <sodipodi:guide
- orientation="vertical"
- position="496"
- id="guide1313" />
- <sodipodi:guide
- orientation="vertical"
- position="383"
- id="guide1315" />
- <sodipodi:guide
- orientation="vertical"
- position="241"
- id="guide1317" />
- <sodipodi:guide
- orientation="vertical"
- position="680"
- id="guide1319" />
- <sodipodi:guide
- orientation="vertical"
- position="749"
- id="guide1321" />
- <sodipodi:guide
- orientation="vertical"
- position="124"
- id="guide1345" />
- <sodipodi:guide
- orientation="vertical"
- position="901"
- id="guide1347" />
- <sodipodi:guide
- orientation="horizontal"
- position="539"
- id="guide3390" />
- <sodipodi:guide
- orientation="horizontal"
- position="359"
- id="guide3392" />
- <sodipodi:guide
- orientation="vertical"
- position="280.5"
- id="guide3324" />
- <sodipodi:guide
- orientation="vertical"
- position="195"
- id="guide3326" />
- <sodipodi:guide
- orientation="vertical"
- position="427"
- id="guide3328" />
- <sodipodi:guide
- orientation="vertical"
- position="795"
- id="guide3340" />
- <sodipodi:guide
- orientation="horizontal"
- position="179"
- id="guide1395" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Benjamin Kosnik</dc:title>
- </cc:Agent>
- </dc:creator>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <rect
- y="382.17499"
- x="241.73018"
- height="23.200001"
- width="141.64481"
- id="rect3420"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3418"
- width="141.64481"
- height="23.200001"
- x="52.730194"
- y="382.17499" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="122.35258"
- y="395.91092"
- id="text3394"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1383"
- x="122.35258"
- y="395.91092">pairing_heap_tag</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3400"
- y="395.91092"
- x="310.55255"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1381"
- x="310.55255"
- y="395.91092">bionomial_heap_tag</tspan></text>
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3380"
- width="141.64481"
- height="23.200001"
- x="425.57764"
- y="292.56177" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.5625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="495.20001"
- y="307.09772"
- id="text1323"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1363"
- x="495.20001"
- y="307.09772">priority_queue_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.16226137;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 124.54034,382.1132 L 124.54034,360.6132 L 311.75594,359.6132 L 311.75594,382.1132"
- id="path2244" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3422"
- width="141.64481"
- height="23.200001"
- x="425.73022"
- y="382.17499" />
- <text
- sodipodi:linespacing="100%"
- id="text3406"
- y="395.91092"
- x="495.3526"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1377"
- x="495.3526"
- y="395.91092">rc_binomial_heap_tag</tspan></text>
- <rect
- y="382.17499"
- x="607.93024"
- height="23.200001"
- width="141.64481"
- id="rect3424"
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <text
- xml:space="preserve"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="679.15259"
- y="395.91092"
- id="text3412"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan1379"
- x="679.15259"
- y="395.91092">binary_heap_tag</tspan></text>
- <path
- id="path3347"
- d="M 495.79886,382.13056 L 495.79886,321.40547"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect2281"
- width="141.64481"
- height="23.200001"
- x="795.625"
- y="382.17499" />
- <text
- sodipodi:linespacing="100%"
- id="text2283"
- y="395.91092"
- x="866.84735"
- style="font-size:9.60000038;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan1359"
- x="866.84735"
- y="395.91092">thin_heap_tag</tspan></text>
- <path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 311.5,360 L 680,360"
- id="path2309" />
- <use
- x="0"
- y="0"
- xlink:href="#path2244"
- id="use2311"
- transform="matrix(-1,0,0,1,992.3371,0)"
- width="990"
- height="765" />
- </g>
-</svg>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Join Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>join</tt> Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- two containers, then merges the containers. It uses
- <tt>join</tt> for <tt>pb_ds</tt>'s priority queues; for the
- STL's priority queues, it successively pops values from one
- container and pushes them into the other. The test measures the
- average time as a function of the number of values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join_timing.cc"><tt>priority_queue_text_join_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc</u></a>, and <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_join_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_join_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_join_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_join_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_join_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_join_timing_test_local.png" alt="no image" /></a></h6>NPL: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this test the node-based heaps perform <tt>join</tt> in
- either logarithmic or constant time. The binary heap requires
- linear time, since the well-known heapify algorithm [<a href="references.html#clrs2001">clrs2001</a>] is linear.</p>
-<p>It would be possible to apply the heapify algorithm to the
- STL containers, if they would support iteration (which they
- don't). Barring iterators, it is still somehow possible to
- perform linear-time merge on a <tt>std::vector</tt>-based STL
- priority queue, using <tt>top()</tt> and <tt>size()</tt> (since
- they are enough to expose the underlying array), but this is
- impossible for a <tt>std::deque</tt>-based STL priority queue.
- Without heapify, the cost is super-linear.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Modify (Down) Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>modify</tt> Timing Test - II</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- into a container then modifies each one "down" (<i>i.e.,</i> it
- makes it smaller). It uses <tt>modify</tt> for <tt>pb_ds</tt>'s
- priority queues; for the STL's priority queues, it pops values
- from a container until it reaches the value that should be
- modified, then pushes values back in. It measures the average
- time for <tt>modify</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.cc"><tt>priority_queue_text_modify_down_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100 f)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The main purpose of this test is to contrast <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a>.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NRTG">NRTG</a>, <a href="#NRTM">NRTM</a>, and <a href="#NRTL">NRTL</a> show the results
- for the pairing heap and thin heaps in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively,</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_modify_down_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_modify_down_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_modify_down_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_modify_down_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_modify_down_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_modify_down_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTG_res_div">
-<div id="NRTG_gcc">
-<div id="NRTG_priority_queue_text_modify_down_timing_test_pairing_thin">
-<div id="NRTG_pq">
-<div id="NRTG_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTG" id="NRTG"><img src="priority_queue_text_modify_down_timing_test_pairing_thin_gcc.png" alt="no image" /></a></h6>NRTG: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTM_res_div">
-<div id="NRTM_msvc">
-<div id="NRTM_priority_queue_text_modify_down_timing_test_pairing_thin">
-<div id="NRTM_pq">
-<div id="NRTM_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTM" id="NRTM"><img src="priority_queue_text_modify_down_timing_test_pairing_thin_msvc.png" alt="no image" /></a></h6>NRTM: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTL_res_div">
-<div id="NRTL_local">
-<div id="NRTL_priority_queue_text_modify_down_timing_test_pairing_thin">
-<div id="NRTL_pq">
-<div id="NRTL_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTL" id= "NRTL"><img src="priority_queue_text_modify_down_timing_test_pairing_thin_local.png" alt="no image" /></a></h6>NRTL: Pairing and thin priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Most points in these results are similar to <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a>.</p>
-<p>It is interesting to note, however, that as opposed to that
- test, a thin heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>) is
- outperformed by a pairing heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>).
- In this case, both heaps essentially perform an <tt>erase</tt>
- operation followed by a <tt>push</tt> operation. As the other
- tests show, a pairing heap is usually far more efficient than a
- thin heap, so this is not surprising.</p>
-<p>Most algorithms that involve priority queues increase values
- (in the sense of the priority queue's comparison functor), and
- so <a href="priority_queue_text_modify_up_timing_test.html">Priority Queue
- Text <tt>modify</tt> Timing Test - I</a> is more interesting
- than this test.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Modify (Up) Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>modify</tt> Timing Test - I</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- into a container then modifies each one "up" (<i>i.e.,</i> it
- makes it larger). It uses <tt>modify</tt> for <tt>pb_ds</tt>'s
- priority queues; for the STL's priority queues, it pops values
- from a container until it reaches the value that should be
- modified, then pushes values back in. It measures the average
- time for <tt>modify</tt> as a function of the number of
- values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_timing.cc"><tt>priority_queue_text_modify_up_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100 t)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>) for graph algorithms settings.
- Note that making an arbitrary value larger (in the sense of the
- priority queue's comparison functor) corresponds to
- decrease-key in standard graph algorithms [<a href="references.html#clrs2001">clrs2001</a>].</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NRTG">NRTG</a>, <a href="#NRTM">NRTM</a>, and <a href="#NRTL">NRTL</a> show the results
- for the pairing heap and thin heaps in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively,</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_modify_up_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_modify_up_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_modify_up_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_modify_up_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_modify_up_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_modify_up_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTG_res_div">
-<div id="NRTG_gcc">
-<div id="NRTG_priority_queue_text_modify_up_timing_test_pairing_thin">
-<div id="NRTG_pq">
-<div id="NRTG_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTG" id="NRTG"><img src="priority_queue_text_modify_up_timing_test_pairing_thin_gcc.png" alt="no image" /></a></h6>NRTG: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTM_res_div">
-<div id="NRTM_msvc">
-<div id="NRTM_priority_queue_text_modify_up_timing_test_pairing_thin">
-<div id="NRTM_pq">
-<div id="NRTM_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTM" id="NRTM"><img src="priority_queue_text_modify_up_timing_test_pairing_thin_msvc.png" alt="no image" /></a></h6>NRTM: Pairing and thin priority queue <tt>modify</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NRTL_res_div">
-<div id="NRTL_local">
-<div id="NRTL_priority_queue_text_modify_up_timing_test_pairing_thin">
-<div id="NRTL_pq">
-<div id="NRTL_Pairing_and_thin__priority_queue__tt_modify_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NRTL" id= "NRTL"><img src="priority_queue_text_modify_up_timing_test_pairing_thin_local.png" alt="no image" /></a></h6>NRTL: Pairing and thin priority queue <tt>modify</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>As noted above, increasing an arbitrary value (in the sense
- of the priority queue's comparison functor) is very common in
- graph-related algorithms. In this case, a thin heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>)
- outperforms a pairing heap (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>).
- Conversely, <a href="priority_queue_text_push_timing_test.html">Priority Queue Text
- <tt>push</tt> Timing Test</a>, <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> and <tt>pop</tt> Timing Test</a>, <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a>, and
- <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a> show that the situation is reversed for other
- operations. It is not clear when to prefer one of these two
- different types.</p>
-<p>In this test <tt>pb_ds</tt>'s binary heaps effectively
- perform modify in linear time. As explained in <a href="pq_design.html#pq_traits">Priority Queue Design::Traits</a>,
- given a valid point-type iterator, a binary heap can perform
- <tt>modify</tt> logarithmically. The problem is that binary
- heaps invalidate their find iterators with each modifying
- operation, and so the only way to obtain a valid point-type
- iterator is to iterate using a range-type iterator until
- finding the appropriate value, then use the range-type iterator
- for the <tt>modify</tt> operation.</p>
-<p>The explanation for the STL's priority queues' performance
- is similar to that in <a href="priority_queue_text_join_timing_test.html">Priority Queue Text
- <tt>join</tt> Timing Test</a>.</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Pop Memory Use Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>pop</tt> Memory Use Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container, then pops them until only one is left in the
- container. It measures the memory use as a function of the
- number of values pushed to the container.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc"><tt>priority_queue_text_pop_mem_usage_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_pop_mem_usage_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_pop_mem_usage_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_pop_mem_usage_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_pop_mem_usage_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_pop_mem_usage_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_pop_455tt__memory-use_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_pop_mem_usage_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>pop</tt> memory-use test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>The priority queue implementations (excluding the STL's) use
- memory proportionally to the number of values they hold:
- node-based implementations (<i>e.g.</i>, a pairing heap) do so
- naturally; <tt>pb_ds</tt>'s binary heap de-allocates memory when
- a certain lower threshold is exceeded.</p>
-<p>Note from <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> and <tt>pop</tt> Timing Test</a> and
- <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a> that this does not impede performance compared to the
- STL's priority queues.</p>
-<p>(See <a href="hash_random_int_erase_mem_usage_test.html">Hash-Based Erase
- Memory Use Test</a> for a similar phenomenon regarding priority
- queues.)</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Push Pop Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>push</tt> and <tt>pop</tt> Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container using <tt>push</tt> , then removes them using
- <tt>pop</tt> . It measures the average time for <tt>push</tt>
- as a function of the number of values.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc"><tt>
- priority_queue_text_push_pop_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NBRG">NBRG</a>, <a href="#NBRM">NBRM</a>, and <a href="#NBRL">NBRL</a> show the results
- for the native priority queues and <tt>pb_ds</tt>'s pairing
- queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_push_pop_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_push_pop_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_push_pop_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_push_pop_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_push_pop_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_tree_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_push_pop_timing_test_local.png" alt="no image" /></a></h6>NPL: Native tree and <tt>pb ds</tt> priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRG_res_div">
-<div id="NBRG_gcc">
-<div id="NBRG_pairing_priority_queue_text_push_pop_timing_test">
-<div id="NBRG_pq">
-<div id="NBRG_Native_tree_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRG" id="NBRG"><img src="pairing_priority_queue_text_push_pop_timing_test_gcc.png" alt="no image" /></a></h6>NBRG: Native tree and <tt>pb ds</tt> pairing priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRM_res_div">
-<div id="NBRM_msvc">
-<div id="NBRM_pairing_priority_queue_text_push_pop_timing_test">
-<div id="NBRM_pq">
-<div id="NBRM_Native_tree_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRM" id="NBRM"><img src="pairing_priority_queue_text_push_pop_timing_test_msvc.png" alt="no image" /></a></h6>NBRM: Native tree and <tt>pb ds</tt> pairing priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRL_res_div">
-<div id="NBRL_local">
-<div id="NBRL_pairing_priority_queue_text_push_pop_timing_test">
-<div id="NBRL_pq">
-<div id="NBRL_Native_tree_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__and__tt_pop_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRL" id= "NBRL"><img src="pairing_priority_queue_text_push_pop_timing_test_local.png" alt="no image" /></a></h6>NBRL: Native tree and <tt>pb ds</tt> pairing priority queue <tt>push</tt> and <tt>pop</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>These results are very similar to <a href="priority_queue_text_push_timing_test.html">Priority Queue Text
- <tt>push</tt> Timing Test</a>. As stated there, pairing heaps
- (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>)
- are most suited for <tt>push</tt> and <tt>pop</tt> sequences of
- non-primitive types such as strings. Observing these two tests,
- one can note that a pairing heap outperforms the others in
- terms of <tt>push</tt> operations, but equals binary heaps
- (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>) if
- the number of <tt>push</tt> and <tt>pop</tt> operations is
- equal. As the number of <tt>pop</tt> operations is at most
- equal to the number of <tt>push</tt> operations, pairing heaps
- are better in this case. See <a href="priority_queue_random_int_push_pop_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> and <tt>pop</tt> Timing
- Test</a> for a case which is different.</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Priority Queue Text Push Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Priority Queue Text <tt>push</tt> Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container using <tt>push</tt> . It measures the average time
- for <tt>push</tt> as a function of the number of values
- pushed.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_timing.cc"><tt>priority_queue_text_push_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures (see <a href="pq_design.html#pq_imp">Design::Priority
- Queues::Implementations</a>).</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NPG">NPG</a>, <a href="#NPM">NPM</a>, and
- <a href="#NPL">NPL</a> show the results for the native priority
- queues and <tt>pb_ds</tt> 's priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively; Figures <a href="#NBRG">NBRG</a>, <a href="#NBRM">NBRM</a>, and <a href="#NBRL">NBRL</a> shows the
- results for the binary-heap based native priority queues and
- <tt>pb_ds</tt>'s pairing-heap priority queues in <a href="pq_performance_tests.html#gcc"><u>g++</u></a>, <a href="pq_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="pq_performance_tests.html#local"><u>local</u></a>,
- respectively</p>
-<div id="NPG_res_div">
-<div id="NPG_gcc">
-<div id="NPG_priority_queue_text_push_timing_test">
-<div id="NPG_pq">
-<div id="NPG_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPG" id="NPG"><img src="priority_queue_text_push_timing_test_gcc.png" alt="no image" /></a></h6>NPG: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPM_res_div">
-<div id="NPM_msvc">
-<div id="NPM_priority_queue_text_push_timing_test">
-<div id="NPM_pq">
-<div id="NPM_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPM" id="NPM"><img src="priority_queue_text_push_timing_test_msvc.png" alt="no image" /></a></h6>NPM: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-rc_binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="rc_binomial_heap_tag.html"><tt>rc_binomial_heap_tag</tt></a>
-</li>
-<li>
-binary_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binary_heap_tag.html"><tt>binary_heap_tag</tt></a>
-</li>
-<li>
-binomial_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="binomial_heap_tag.html"><tt>binomial_heap_tag</tt></a>
-</li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPL_res_div">
-<div id="NPL_local">
-<div id="NPL_priority_queue_text_push_timing_test">
-<div id="NPL_pq">
-<div id="NPL_Native_and__tt_pb_ds_455tt__priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPL" id= "NPL"><img src="priority_queue_text_push_timing_test_local.png" alt="no image" /></a></h6>NPL: Native and <tt>pb ds</tt> priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRG_res_div">
-<div id="NBRG_gcc">
-<div id="NBRG_pairing_priority_queue_text_push_timing_test">
-<div id="NBRG_pq">
-<div id="NBRG_Native_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRG" id="NBRG"><img src="pairing_priority_queue_text_push_timing_test_gcc.png" alt="no image" /></a></h6>NBRG: Native and <tt>pb ds</tt> pairing priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRM_res_div">
-<div id="NBRM_msvc">
-<div id="NBRM_pairing_priority_queue_text_push_timing_test">
-<div id="NBRM_pq">
-<div id="NBRM_Native_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__timing_test"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRM" id="NBRM"><img src="pairing_priority_queue_text_push_timing_test_msvc.png" alt="no image" /></a></h6>NBRM: Native and <tt>pb ds</tt> pairing priority queue <tt>push</tt> timing test - <a href="pq_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_pq_deque-
-<tt>std::priority_queue</tt> adapting <tt>std::deque</tt></li>
-<li>
-n_pq_vector-
-<tt>std::priority_queue</tt> adapting <tt>std::vector</tt></li>
-<li>
-pairing_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>
-</li>
-<li>
-thin_heap-
-<a href="priority_queue.html"><tt>priority_queue</tt></a>
- with <tt>Tag</tt> = <a href="thin_heap_tag.html"><tt>thin_heap_tag</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NBRL_res_div">
-<div id="NBRL_local">
-<div id="NBRL_pairing_priority_queue_text_push_timing_test">
-<div id="NBRL_pq">
-<div id="NBRL_Native_and__tt_pb_ds_455tt__pairing_priority_queue__tt_push_455tt__timing_test"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NBRL" id= "NBRL"><img src="pairing_priority_queue_text_push_timing_test_local.png" alt="no image" /></a></h6>NBRL: Native and <tt>pb ds</tt> pairing priority queue <tt>push</tt> timing test - <a href = "pq_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Pairing heaps (<a href="priority_queue.html"><tt>priority_queue</tt></a> with
- <tt>Tag</tt> = <a href="pairing_heap_tag.html"><tt>pairing_heap_tag</tt></a>)
- are the most suited for sequences of <tt>push</tt> and
- <tt>pop</tt> operations of non-primitive types (<i>e.g.</i>
-<tt>std::string</tt>s). (see also <a href="priority_queue_text_push_pop_timing_test.html">Priority Queue
- Text <tt>push</tt> and <tt>pop</tt> Timing Test</a>.) They are
- less constrained than binomial heaps, <i>e.g.</i>, and since
- they are node-based, they outperform binary heaps. (See
- <a href="priority_queue_random_int_push_timing_test.html">Priority
- Queue Random Integer <tt>push</tt> Timing Test</a> for the case
- of primitive types.)</p>
-<p>The STL's priority queues do not seem to perform well in
- this case: the <tt>std::vector</tt> implementation needs to
- perform a logarithmic sequence of string operations for each
- operation, and the deque implementation is possibly hampered by
- its need to manipulate a relatively-complex type (deques
- support a <i>O(1)</i> <tt>push_front</tt>, even though it is
- not used by <tt>std::priority_queue</tt>.)</p>
-<p><a href="pq_performance_tests.html#pq_observations">Priority-Queue
- Performance Tests::Observations</a> discusses this further and
- summarizes.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>quadratic_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>quadratic_probe_fn</tt> Interface</h1>
-
- <p>A probe sequence policy using square increments.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/hash_policy.hpp"><tt>hash_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Size_Type42920436" id=
-"Size_Type42920436"><b>typename</b> Size_Type </a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
-
- <td>size_t</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Size_Type42920436"><tt>Size_Type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>quadratic_probe_fn</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Protected Methods</a></h2>
-
- <h3><a name="link7" id="link7">Offset Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <span class="c1"><tt>i</tt></span>-th
- offset from the hash value.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>range_invalidation_guarantee Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>range_invalidation_guarantee</tt> Interface</h1>
-
- <p>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.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="point_invalidation_guarantee.html"><span class=
-"c2"><tt>point_invalidation_guarantee</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>rb_tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>rb_tree_tag</tt> Interface</h1>
-
- <p>Red-black tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>rc_binomial_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>rc_binomial_heap_tag</tt> Interface</h1>
-
- <p>Redundant-counter binomial-heap data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>References</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>References</h1>
-
- <ol>
- <li>[<a name="abrahams97exception" id=
- "abrahams97exception">abrahams97exception</a>] Dave Abrahams,
- STL Exception Handling Contract, <a href=
- "http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf">
- http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf</a></li>
-
- <li>[<a name="alexandrescu01modern" id=
- "alexandrescu01modern">alexandrescu01modern</a>] Andrei
- Alexandrescu, <i>Modern C++ Design: Generic Programming and
- Design Patterns Applied</i>, Addison-Wesley Publishing
- Company, 2001</li>
-
- <li>[<a name="andrew04mtf" id="andrew04mtf">andrew04mtf</a>]
- K. Andrew and D. Gleich, "MTF, Bit, and COMB: A Guide to
- Deterministic and Randomized Algorithms for the List Update
- Problem"</li>
-
- <li>[<a name="austern00noset" id=
- "austern00noset">austern00noset</a>] Matthew Austern, "Why
- You shouldn't use <tt>set</tt> - and What You Should Use
- Instead", C++ Report, April, 2000</li>
-
- <li>[<a name="austern01htprop" id=
- "austern01htprop">austern01htprop</a>] Matthew Austern, "A
- Proposal to Add Hashtables to the Standard Library", <a href=
- "http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2001/n1326l.html">
- http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2001/n1326l.html</a></li>
-
- <li>[<a name="austern98segmented" id=
- "austern98segmented">austern98segmented</a>] Matthew Austern,
- "Segmented iterators and hierarchical algorithms", Generic
- Programming, April 1998, pp. 80-90</li>
-
- <li>[<a name="boost_timer" id="boost_timer">boost_timer</a>],
- "Boost timer library", <a href=
- "http://www.boost.org/">http://www.boost.org</a> by Beman
- Dawes</li>
-
- <li>[<a name="boost_pool" id="boost_pool">boost_pool</a>],
- "Boost pool library", <a href=
- "http://www.boost.org/">http://www.boost.org</a> by Stephen
- Cleary</li>
-
- <li>[<a name="boost_type_traits" id=
- "boost_type_traits">boost_type_traits</a>], "Boost
- <tt>type_traits</tt> library", <a href=
- "http://www.boost.org/">http://www.boost.org</a> by John
- Maddock, Steve Cleary, <i>et. al.</i></li>
-
- <li>[<a name="brodal96priority" id=
- "brodal96priority">brodal96priority</a>] Gerth Stolting
- Brodal, <a href=
- "http://portal.acm.org/citation.cfm?id=313883">Worst-case
- efficient priority queues</a></li>
-
- <li>[<a name="bulka99efficient" id=
- "bulka99efficient">bulka99efficient</a>] D. Bulka, and D.
- Mayhew, "Efficient C++ Programming Techniques.",
- Addison-Wesley Publishing Company, Addison-Wesley, 1997</li>
-
- <li>[<a name="clrs2001" id="clrs2001">clrs2001</a>] T. H.
- Cormen, C. E., Leiserson, R. L. Rivest, C. and Stein,
- "Introduction to Algorithms, 2nd ed.", MIT Press, 2001</li>
-
- <li>[<a name="dinkumware_stl" id=
- "dinkumware_stl">dinkumware_stl</a>], "Dinkumware C++ Library
- Reference", <a href=
- "http://www.dinkumware.com/htm_cpl/index.html">http://www.dinkumware.com/htm_cpl/index.html</a></li>
-
- <li>[<a name="dubhashi98neg" id=
- "dubhashi98neg">dubhashi98neg</a>] D. Dubashi, and D. Ranjan,
- "Balls and bins: A study in negative dependence.", Random
- Structures and Algorithms 13, 2 (1998), 99-124</li>
-
- <li>[<a name="fagin79extendible" id=
- "fagin79extendible">fagin79extendible</a>] R. Fagin, J.
- Nievergelt, N. Pippenger, and H. R. Strong, "Extendible
- hashing - a fast access method for dynamic files", ACM Trans.
- Database Syst. 4, 3 (1979), 315-344</li>
-
- <li>[<a name="filliatre2000ptset" id=
- "filliatre2000ptset">filliatre2000ptset</a>], J. C.
- Filliatre, "Ptset: Sets of integers implemented as Patricia
- trees", <a href=
- "http://www.lri.fr/~filliatr/ftp/ocaml/misc/ptset.ml">http://www.lri.fr/~filliatr/ftp/ocaml/misc/ptset.ml</a></li>
-
- <li>[<a name="fredman86pairing" id=
- "fredman86pairing">fredman86pairing</a>], M. L. Fredman, R
- Sedgewick, D. D. Sleator, R. E. Tarjan, <a href=
- "http://www.cs.cmu.edu/~sleator/papers/pairing-heaps.pdf">The
- pairing heap: a new form of self-adjusting heap</a></li>
-
- <li>[<a name="gamma95designpatterns" id=
- "gamma95designpatterns">gamma95designpatterns</a>] E. Gamma,
- R. Helm, R. Johnson, and J. Vlissides, "Design Patterns -
- Elements of Reusable Object-Oriented Software",
- Addison-Wesley Publishing Company, Addison-Wesley, 1995</li>
-
- <li>[<a name="garg86order" id="garg86order">garg86order</a>]
- A. K. Garg and C. C. Gotlieb, "Order-preserving key
- transformations", Trans. Database Syst. 11, 2 (1986),
- 213-234</li>
-
- <li>[<a name="hyslop02making" id=
- "hyslop02making">hyslop02making</a>] J. Hyslop, and H.
- Sutter, "Making a real hash of things", C++ Report, May
- 2002</li>
-
- <li>[<a name="jossutis01stl" id=
- "jossutis01stl">jossutis01stl</a>] N. M. Jossutis, "The C++
- Standard Library - A Tutorial and Reference", Addison-Wesley
- Publishing Company, Addison-Wesley, 2001</li>
-
- <li>[<a name="kt99fat_heaps" id=
- "kt99fat_heaps">kt99fat_heas</a>] Haim Kaplan and Robert E.
- Tarjan, <a href=
- "http://www.cs.princeton.edu/research/techreps/TR-597-99">New
- Heap Data Structures</a></li>
-
- <li>[<a name="kleft00sets" id="kleft00sets">kleft00sets</a>]
- Klaus Kleft and Angelika Langer, "Are Set Iterators Mutable
- or Immutable?", C/C++ Users Jornal, October 2000</li>
-
- <li>[<a name="knuth98sorting" id=
- "knuth98sorting">knuth98sorting</a>] D. E. Knuth, "The Art of
- Computer Programming - Sorting and Searching", Addison-Wesley
- Publishing Company, Addison-Wesley, 1998</li>
-
- <li>[<a name="liskov98data" id=
- "liskov98data">liskov98data</a>] B. Liskov, "Data abstraction
- and hierarchy", SIGPLAN Notices 23, 5 (May 1998)</li>
-
- <li>[<a name="litwin80lh" id="litwin80lh">litwin80lh</a>] W.
- Litwin, "Linear hashing: A new tool for file and table
- addressing", Proceedings of International Conference on Very
- Large Data Bases (June 1980), pp. 212-223</li>
-
- <li>[<a name="maverik_lowerbounds" id=
- "maverik_lowerbounds">maverik_lowerbounds</a>] Maverik Woo,
- <a href=
- "http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/">
- Deamortization - Part 2: Binomial Heaps</a></li>
-
- <li>[<a name="metrowerks_stl" id=
- "metrowerks_stl">metrowerks_stl</a>], "Metrowerks CodeWarrior
- Pro 7 MSL C++ Reference Manual",</li>
-
- <li>[<a name="meyers96more" id=
- "meyers96more">meyers96more</a>] S. Meyers, "More Effective
- C++: 35 New Ways to Improve Your Programs and Designs - 2nd
- ed.", Addison-Wesley Publishing Company, Addison-Wesley,
- 1996</li>
-
- <li>[<a name="meyers00nonmember" id=
- "meyers00nonmember">meyers00nonmember</a>] S. Meyers, "How
- Non-Member Functions Improve Encapsulation", C/C++ Users
- Journal, 2000</li>
-
- <li>[<a name="meyers01stl" id="meyers01stl">meyers01stl</a>]
- S. Meyers, "Effective STL: 50 Specific Ways to Improve Your
- Use of the Standard Template Library", Addison-Wesley
- Publishing Company, Addison-Wesley, 2001</li>
-
- <li>[<a name="meyers02both" id=
- "meyers02both">meyers02both</a>] S. Meyers, "Class Template,
- Member Template - or Both?", C/C++ Users Journal, 2003</li>
-
- <li>[<a name="motwani95random" id=
- "motwani95random">motwani95random</a>] R. Motwani, and P.
- Raghavan, "Randomized Algorithms", Cambridge University
- Press</li>
-
- <li>[<a name="mscom" id="mscom">mscom</a>] <a href=
- "http://www.microsoft.com/com">COM: Component Model Object
- Technologies</a></li>
-
- <li>[<a name="musser95rationale" id=
- "musser95rationale">musser95rationale</a>], David R. Musser,
- "Rationale for Adding Hash Tables to the C++ Standard
- Template Library"</li>
-
- <li>[<a name="musser96stltutorial" id=
- "musser96stltutorial">musser96stltutorial</a>] D. R. Musser
- and A. Saini, "STL Tutorial and Reference Guide",
- Addison-Wesley Publishing Company, Addison-Wesley, 1996</li>
-
- <li>[<a name="nelson96stlpq" id=
- "nelson96stlpq">nelson96stlpql</a>] Mark Nelson, <a href=
- "http://www.dogma.net/markn/articles/pq_stl/priority.htm">Priority
- Queues and the STL</a>, Dr. Dobbs Journal, January, 1996</li>
-
- <li>[<a name="okasaki98mereable" id=
- "okasaki98mereable">okasaki98mereable</a>] C. Okasaki and A.
- Gill, "Fast mergeable integer maps", In Workshop on ML, pages
- 77--86, September 1998. 95</li>
-
- <li>[<a name="sgi_stl" id="sgi_stl">sgi_stl</a>] SGI,
- "Standard Template Library Programmer's Guide", <a href=
- "http://www.sgi.com/tech/stl/">http://www.sgi.com/tech/stl</a></li>
-
- <li>[<a name="select_man" id="select_man">select_man</a>]
- <a href=
- "http://www.scit.wlv.ac.uk/cgi-bin/mansec?3C+select"><tt>select</tt>
- man page.</a></li>
-
- <li>[<a name="sleator84amortized" id=
- "sleator84amortized">sleator84amortized</a>] D. D. Sleator
- and R. E. Tarjan, "Amortized Efficiency of List Update
- Problems", ACM Symposium on Theory of Computing, 1984</li>
-
- <li>[<a name="sleator85self" id=
- "sleator85self">sleator85self</a>] D. D. Sleator and R. E.
- Tarjan, "Self-Adjusting Binary Search Trees", ACM Symposium
- on Theory of Computing, 1985</li>
-
- <li>[<a name="stepanov94standard" id=
- "stepanov94standard">stepanov94standard</a>] A. A. Stepanov
- and M. Lee", "The Standard Template Library"</li>
-
- <li>[<a name="stroustrup97cpp" id=
- "stroustrup97cpp">stroustrup97cpp</a>] Bjarne Stroustrup,
- <i>The C++ Programming Langugage -3rd ed.</i>, Addison-Wesley
- Publishing Company,Reading, MA, USA, 1997</li>
-
- <li>[<a name="vandevoorde2002cpptemplates" id=
- "vandevoorde2002cpptemplates">vandevoorde2002cpptemplates</a>]
- D. Vandevoorde, and N. M. Josuttis, "C++ Templates: The
- Complete Guide", Addison-Wesley Publishing Company,
- Addison-Wesley, 2002</li>
-
- <li>[<a name="wickland96thirty" id=
- "wickland96thirty">wickland96thirty</a>] C. A. Wickland,
- "Thirty Years Among the Dead", National Psychological
- Institute, Los Angeles, 1996,<a href=
- "http://myweb.wvnet.edu/~gsa00121/books/amongdead30.zip">http://myweb.wvnet.edu/gsa00121/books/amongdead30.zip</a></li>
- </ol>
- <hr />
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
-<title>resize_error Interface</title>
-<meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
-</head>
-
-<body>
-<div id="page">
-<h1><tt>resize_error</tt> Interface</h1>
-
-<p>A container cannot be resized.</p>
-
-<p>Exception thrown when a size policy cannot supply an
- adequate size for an external resize.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/exception.hpp"><tt>exception.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- <a href="exceptions.html"><span class=
- "c2"><tt>resize_error</tt></span></a>
- </pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
- </body>
- </html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_probe_fn</tt> Interface</h1>
-
- <p>A sample probe policy.</p>
-
- <p>This class serves to show the interface a probe functor
- needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp"><tt>sample_probe_fn.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_probe_fn
- (<b>const</b> sample_probe_fn &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_probe_fn &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Offset methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (const_key_reference r_key,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the <span class="c1"><tt>i</tt></span>-th
- offset from the hash value of some key <span class=
- "c1"><tt>r_key</tt></span>.</p>
-
- <p><tt>size_type</tt> is the size type on which the
- functor operates.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_range_hashing Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_range_hashing</tt> Interface</h1>
-
- <p>A sample range-hashing functor.</p>
-
- <p>This class serves to show the interface a range-hashing
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp"><tt>sample_range_hashing.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_range_hashing &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_range_hashing &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Notification methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the policy object that the container's size
- has changed to <span class="c1"><tt>size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> hash) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms the hash value <span class=
- "c1"><tt>hash</tt></span> into a ranged-hash value.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_ranged_hash_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_ranged_hash_fn</tt> Interface</h1>
-
- <p>A sample ranged-hash functor.</p>
-
- <p>This class serves to show the interface a ranged-hash
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp"><tt>sample_ranged_hash_fn.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_hash_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_hash_fn
- (<b>const</b> sample_ranged_hash_fn &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_ranged_hash_fn &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Notification methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the policy object that the container's size
- has changed to <span class="c1"><tt>size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (const_key_reference r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms <span class="c1"><tt>r_key</tt></span> into
- a position within the table.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_ranged_probe_fn Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_ranged_probe_fn</tt> Interface</h1>
-
- <p>A sample ranged-probe functor.</p>
-
- <p>This class serves to show the interface a ranged-probe
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp"><tt>sample_ranged_probe_fn.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_probe_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_ranged_probe_fn
- (<b>const</b> sample_ranged_probe_fn &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_ranged_probe_fn &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Notification methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the policy object that the container's size
- has changed to <span class="c1"><tt>size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- <b>operator</b>()
- (const_key_reference r_key,
- size_t hash,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Transforms the <tt><b>const</b></tt> key reference
- <span class="c1"><tt>r_key</tt></span> <span class=
- "c1"><tt>into the </tt></span><span class=
- "c1"><tt>i-th </tt></span>position within the table. This
- method <span class="c1"><tt>i</tt></span>s called for
- each collision within the probe sequence.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_resize_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_resize_policy</tt> Interface</h1>
-
- <p>A sample resize policy.</p>
-
- <p>This class serves to show the interface a resize policy
- needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp"><tt>sample_resize_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_resize_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_resize_policy &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_resize_policy &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Insert search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Find search
- notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Erase search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Content change
- notifications.</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_e)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Size change
- notifications.</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Queries.</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
- get_new_size
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_used_e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries what the new <span class=
- "c1"><tt>size</tt></span> should be.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_resize_trigger Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_resize_trigger</tt> Interface</h1>
-
- <p>A sample resize trigger policy.</p>
-
- <p>This class serves to show the interface a trigger policy
- needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp"><tt>
- sample_resize_trigger.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_resize_trigger
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_resize_trigger &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_resize_trigger &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Insert search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_insert_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Find search
- notifications.</a></h3>
-
- <p>Notifications called during a find operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_find_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Erase search
- notifications.</a></h3>
-
- <p>Notifications called during an insert operation.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_start
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search started.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_collision
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search encountered a collision.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erase_search_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies a search ended.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Content change
- notifications.</a></h3>
-
- <p>Notifications called when the content of the table changes
- in a way that can affect the resize policy.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_inserted
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was inserted. the total number of
- entries in the table is <span class=
- "c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- notify_erased
- (<a href="#size_type55424436"><tt>size_type</tt></a> num_entries)
-</pre>
- </td>
-
- <td>
- <p>Notifies an element was erased.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_cleared
- ()
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was cleared.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Size change
- notifications.</a></h3>
-
- <p>Notifications called when the table changes size.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized as a result of this
- object's signifying that a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- notify_externally_resized
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Notifies the table was resized externally.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Queries.</a></h3>
-
- <p>Called to query whether/how to resize.</p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_resize_needed
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a resize is needed.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- is_grow_needed
- (<a href="#size_type55424436"><tt>size_type</tt></a> size,
- <a href=
-"#size_type55424436"><tt>size_type</tt></a> num_entries) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Queries whether a grow is needed.</p>
-
- <p>This method is called only if this object indicated
- resize is needed. The actual <span class=
- "c1"><tt>size</tt></span> of the table is <span class=
- "c1"><tt>size</tt></span>, and the number of entries in
- it is <span class="c1"><tt>num_entries</tt></span>.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Private Methods</a></h2>
-
- <h3><a name="link13" id="link13">Overrides.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>void</b>
- do_resize
- (<a href="#size_type55424436"><tt>size_type</tt></a> new_size)
-</pre>
- </td>
-
- <td>
- <p>Resizes to <span class=
- "c1"><tt>new_size</tt></span>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_size_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_size_policy</tt> Interface</h1>
-
- <p>A sample size policy.</p>
-
- <p>This class serves to show the interface a size policy needs
- to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp"><tt>sample_size_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Methods</a></h2>
-
- <h3><a name="link4" id="link4">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_size_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_range_hashing
- (<b>const</b> sample_size_policy &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_size_policy &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Size methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_larger_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is larger.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- get_nearest_smaller_size
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> size) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Given a size <span class="c1"><tt>size</tt></span>,
- returns a size that is smaller.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_tree_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_tree_node_update</tt> Interface</h1>
-
- <p>A sample node updater.</p>
-
- <p>This class serves to show the interface a node update
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp"><tt>
- sample_tree_node_update.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Metadata definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
-
- <p>This can be any type; size_t is merely an example.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Protected Methods</a></h2>
-
- <h3><a name="link5" id="link5">Conclassors, declassor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_tree_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (node_iterator node_it,
- const_node_iterator end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <span class=
- "c1"><tt>node_iterator</tt></span> <span class=
- "c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node
- iterator.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_trie_e_access_traits Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_trie_e_access_traits</tt> Interface</h1>
-
- <p>A sample trie element-access traits.</p>
-
- <p>This class serves to show the interface an element- access
- traits class needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp">
- <tt>sample_trie_e_access_traits.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t, e.g.
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-std::string, e.g.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-const string &, e.g.
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link3" id="link3">Element definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-string::const_iterator, e.g.
-</pre>
- </td>
-
- <td>
- <p>Element <tt><b>const</b></tt> iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_type393186" id="e_type393186">e_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-char, e.g.
-</pre>
- </td>
-
- <td>
- <p>Element type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="max_size10483336" id="max_size10483336">max_size</a>
-</pre>
- </td>
-
- <td>
- <pre>
-4, e.g.
-</pre>
- </td>
-
- <td>
- <p>Number of distinct elements.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Public Methods</a></h2>
-
- <h3><a name="link5" id="link5">Access methods.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the first element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the after-last element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#size_type55424436"><tt>size_type</tt></a>
- e_pos
- (<a href="#e_type393186"><tt>e_type</tt></a> e)
-</pre>
- </td>
-
- <td>
- <p>Maps an <span class="c1"><tt>element</tt></span> to a
- position.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_trie_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_trie_node_update</tt> Interface</h1>
-
- <p>A sample node updater.</p>
-
- <p>This class serves to show the interface a node update
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp"><tt>
- sample_trie_node_update.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Metadata definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-size_t
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
-
- <p>This can be any type; size_t is merely an example.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link4" id="link4">Protected Methods</a></h2>
-
- <h3><a name="link5" id="link5">Conclassors, declassor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_trie_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Operators.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (node_iterator node_it,
- const_node_iterator end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <span class=
- "c1"><tt>node_iterator</tt></span> <span class=
- "c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node
- iterator.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>sample_update_policy Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>sample_update_policy</tt> Interface</h1>
-
- <p>A sample list-update policy.</p>
-
- <p>This class serves to show the interface a list update
- functor needs to support.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp"><tt>sample_update_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Public Methods</a></h2>
-
- <h3><a name="link2" id="link2">Constructors, destructor, and
- related.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_update_policy
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
-
- <p>Must be default constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- sample_update_policy
- (<b>const</b> sample_update_policy &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
-
- <p>Must be copy constructable.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- swap
- (sample_update_policy &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
-
- <p>Must be swappable (if there is such a word).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Protected Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Metadata definitions.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-Some metadata type.
-</pre>
- </td>
-
- <td>
- <p>Metadata on which this functor operates.</p>
-
- <p>The <tt><b>class</b></tt> must declare the metadata
- type on which it operates; the list-update based
- containers will append to each node an object of this
- type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Protected Methods</a></h2>
-
- <h3><a name="link6" id="link6">Metadata operations.</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#metadata_type2849297114"><tt>metadata_type</tt></a>
- <b>operator</b>()
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Creates a metadata object.</p>
-
- <p>A list-update based container object will call this
- method to create a metadata type when a node is
- created.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>bool</b>
- <b>operator</b>()
- (metadata_reference r_data) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>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 should return
- <tt><b>true</b></tt> if the node should be moved to the
- front of the list.</p>
-
- <p><tt>metadata_reference</tt> is a reference to a
- <a href=
- "#metadata_type2849297114"><tt>metadata_type</tt></a>.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>splay_tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>splay_tree_tag</tt> Interface</h1>
-
- <p>Splay tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="tree_tag.html"><span class=
-"c2"><tt>tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Tests</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Tests</h1>
-
- <p><a href="assoc_tests.html">Associative-Container Tests</a>
- describes tests for associative containers; <a href=
- "pq_tests.html">Priority-Queue Tests</a> describes tests for
- priority queues.</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>thin_heap_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>thin_heap_tag</tt> Interface</h1>
-
- <p>Thin heap data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="priority_queue_tag.html"><span class=
-"c2"><tt>priority_queue_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>tree</tt> Interface</h1>
-
- <p>A concrete basic tree-based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn </a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>
- <pre>
-std::less<<a href="#Key2501"><tt>Key</tt></a>>
-</pre>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag </a>
-</pre>
- </td>
-
- <td>
- <p>Mapped-structure tag.</p>
- </td>
-
- <td><a href="rb_tree_tag.html"><span class=
- "c2"><tt>rb_tree_tag</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Update841554648" id=
-"Node_Update841554648"><b>template</b><
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>class</b> Cmp_Fn_,
- <b>typename</b> Allocator_>
-<b>class</b> Node_Update </a>
-</pre>
- </td>
-
- <td>
- <p>Node updater type.</p>
-
- <p><a href=
- "tree_based_containers.html#invariants">Design::Tree-Based
- Containers::Node Invariants</a> explains this
- concept.</p>
- </td>
-
- <td><a href="null_tree_node_update.html"><span class=
- "c2"><tt>null_tree_node_update</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_tree.html"><span class=
-"c2"><tt>basic_tree</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link3" id="link3">Public Types and
- Constants</a></h2>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="cmp_fn394495" id="cmp_fn394495">cmp_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"tree_const_node_iterator.html"><span class=
-"c2"><tt>const_node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="tree_node_iterator.html"><span class=
-"c2"><tt>node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- tree
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- tree
- (<b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- tree
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- tree
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#cmp_fn394495"><tt>cmp_fn</tt></a> &r_cmp_fn)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object. <span class=
- "c1"><tt>r_cmp_fn</tt></span> will be copied by the
- <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> object of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- tree
- (<b>const</b> <span class=
-"c2"><tt>tree</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~tree
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>tree</tt></span> &
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>tree</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>tree</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#cmp_fn394495"><tt>cmp_fn</tt></a> &
- get_cmp_fn
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a> object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>const</b> <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> &
- get_cmp_fn
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the <a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a> object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Node-Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to the node at the root of the tree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to the node at the root of the tree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- tree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- tree.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Tree-Based Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Tree Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The tree-based container has the following declaration:</p>
- <pre>
-<b>template</b><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Cmp_Fn = std::less<Key>,
- <b>typename</b> Tag = <a href="rb_tree_tag.html">rb_tree_tag</a>,
- <b>template</b><
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>typename</b> Cmp_Fn_,
- <b>typename</b> Allocator_>
- <b>class</b> Node_Update = <a href=
-"null_tree_node_update.html">null_tree_node_update</a>,
- <b>typename</b> Allocator = std::allocator<<b>char</b>> >
-<b>class</b> <a href=
-"tree.html">tree</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Key</tt> is the key type.</li>
-
- <li><tt>Mapped</tt> is the mapped-policy.</li>
-
- <li><tt>Cmp_Fn</tt> is a key comparison functor</li>
-
- <li><tt>Tag</tt> specifies which underlying data structure
- to use.</li>
-
- <li><tt>Node_Update</tt> is a policy for updating node
- invariants. This is described in <a href="#invariants">Node
- Invariants</a>.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The <tt>Tag</tt> parameter specifies which underlying
- data structure to use. Instantiating it by <a href=
- "rb_tree_tag.html"><tt>rb_tree_tag</tt></a>, <a href=
- "splay_tree_tag.html"><tt>splay_tree_tag</tt></a>, or
- <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>,
- specifies an underlying red-black tree, splay tree, or
- ordered-vector tree, respectively; any other tag is illegal.
- Note that containers based on the former two contain more types
- and methods than the latter (<i>e.g.</i>,
- <tt>reverse_iterator</tt> and <tt>rbegin</tt>), and different
- exception and invalidation guarantees.</p>
-
- <h2><a name="invariants" id="invariants">Node
- Invariants</a></h2>
-
- <p>Consider the two trees in Figures <a href=
- "#node_invariants">Some node invariants</a> A and B. The first
- is a tree of floats; the second is a tree of pairs, each
- signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of
- these trees can support the usual queries: the first can easily
- search for <tt>0.4</tt>; the second can easily search for
- <tt>std::make_pair(10, 41)</tt>.</p>
-
- <p>Each of these trees can efficiently support other queries.
- The first can efficiently determine that the 2rd key in the
- tree is <tt>0.3</tt>; the second can efficiently determine
- whether any of its intervals overlaps
- <tt>std::make_pair(29,42)</tt> (useful in geometric
- applications or distributed file systems with leases, for
- example). (See <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc"><tt>tree_order_statistics.cc</tt></a>
- and <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/tree_intervals.cc"><tt>tree_intervals.cc</tt></a>
- for examples.) It should be noted that an <tt>std::set</tt> can
- only solve these types of problems with linear complexity.</p>
-
- <p>In order to do so, each tree stores some <i>metadata</i> in
- each node, and maintains node invariants <a href=
- "references.html#clrs2001">clrs2001</a>]. The first stores in
- each node the size of the sub-tree rooted at the node; the
- second stores at each node the maximal endpoint of the
- intervals at the sub-tree rooted at the node.</p>
-
- <h6 class="c1"><a name="node_invariants" id=
- "node_invariants"><img src="node_invariants.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Some node invariants.</h6>
-
- <p>Supporting such trees is difficult for a number of
- reasons:</p>
-
- <ol>
- <li>There must be a way to specify what a node's metadata
- should be (if any).</li>
-
- <li>Various operations can invalidate node invariants.
- <i>E.g.</i>, Figure <a href=
- "#node_invariant_invalidations">Invalidation of node
- invariants</a> shows how a right rotation, performed on A,
- results in B, with nodes <i>x</i> and <i>y</i> having
- corrupted invariants (the grayed nodes in C); Figure <a href=
- "#node_invariant_invalidations">Invalidation of node
- invariants</a> shows how an insert, performed on D, results
- in E, with nodes <i>x</i> and <i>y</i> having corrupted
- invariants (the grayed nodes in F). It is not feasible to
- know outside the tree the effect of an operation on the nodes
- of the tree.</li>
-
- <li>The search paths of standard associative containers are
- defined by comparisons between keys, and not through
- metadata.</li>
-
- <li>It is not feasible to know in advance which methods trees
- can support. Besides the usual <tt>find</tt> method, the
- first tree can support a <tt>find_by_order</tt> method, while
- the second can support an <tt>overlaps</tt> method.</li>
- </ol>
-
- <h6 class="c1"><a name="node_invariant_invalidations" id=
- "node_invariant_invalidations"><img src=
- "node_invariant_invalidations.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Invalidation of node invariants.</h6>
-
- <p>These problems are solved by a combination of two means:
- node iterators, and template-template node updater
- parameters.</p>
-
- <h3><a name="node_it" id="node_it">Node Iterators</a></h3>
-
- <p>Each tree-based container defines two additional iterator
- types, <a href=
- "tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- and <a href=
- "tree_node_iterator.html"><tt>node_iterator</tt></a>.
- These iterators allow descending from a node to one of its
- children. Node iterator allow search paths different than those
- determined by the comparison functor. <a href=
- "tree.html">tree</a>
- supports the methods:</p>
- <pre>
- <a href="tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- node_begin() <b>const</b>;
-
- <a href="tree_node_iterator.html"><tt>node_iterator</tt></a>
- node_begin();
-
- <a href="tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- node_end() <b>const</b>;
-
- <a href="tree_node_iterator.html"><tt>node_iterator</tt></a>
- node_end();
-</pre>
-
- <p>The first pairs return node iterators corresponding to the
- root node of the tree; the latter pair returns node iterators
- corresponding to a just-after-leaf node.</p>
-
- <h3><a name="node_up" id="node_up">Node Updater
- (Template-Template) Parameters</a></h3>
-
- <p>The tree-based containers are parametrized by a
- <tt>Node_Update</tt> template-template parameter. A tree-based
- container instantiates <tt>Node_Update</tt> to some
- <tt>node_update</tt> class, and publicly
- subclasses <tt>node_update</tt>. Figure
- <a href="#tree_node_update_cd">A tree and its update
- policy</a> shows this scheme, as well as some predefined
- policies (which are explained below).</p>
-
- <h6 class="c1"><a name="tree_node_update_cd" id=
- "tree_node_update_cd"><img src=
- "tree_node_update_policy_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">A tree and its update policy.</h6>
-
- <p><tt>node_update</tt> (an instantiation of
- <tt>Node_Update</tt>) must define <tt>metadata_type</tt> as
- the type of metadata it requires. For order statistics,
- <i>e.g.</i>, <tt>metadata_type</tt> might be <tt>size_t</tt>.
- The tree defines within each node a <tt>metadata_type</tt>
- object.</p>
-
- <p><tt>node_update</tt> must also define the following method
- for restoring node invariants:</p>
- <pre>
- void
- operator()(<a href=
-"tree_node_iterator.html"><tt>node_iterator</tt></a> nd_it, <a href=
-"tree_const_node_iterator.html"><tt>const_node_iterator</tt></a> end_nd_it)
-</pre>
-
- <p>In this method, <tt>nd_it</tt> is a <a href=
- "tree_node_iterator.html"><tt>node_iterator</tt></a>
- corresponding to a node whose A) all descendants have valid
- invariants, and B) its own invariants might be violated;
- <tt>end_nd_it</tt> is a <a href=
- "tree_const_node_iterator.html"><tt>const_node_iterator</tt></a>
- corresponding to a just-after-leaf node. This method should
- correct the node invariants of the node pointed to by
- <tt>nd_it</tt>. For example, say node <i>x</i> in Figure
- <a href="#restoring_node_invariants">Restoring node
- invariants</a>-A has an invalid invariant, but its' children,
- <i>y</i> and <i>z</i> have valid invariants. After the
- invocation, all three nodes should have valid invariants, as in
- Figure <a href="#restoring_node_invariants">Restoring node
- invariants</a>-B.</p>
-
- <h6 class="c1"><a name="restoring_node_invariants" id=
- "restoring_node_invariants"><img src=
- "restoring_node_invariants.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Invalidation of node invariants.</h6>
-
- <p>When a tree operation might invalidate some node invariant,
- it invokes this method in its <tt>node_update</tt> base to
- restore the invariant. For example, Figure <a href=
- "#update_seq_diagram">Insert update sequence diagram</a> shows
- an <tt>insert</tt> operation (point A); the tree performs some
- operations, and calls the update functor three times (points B,
- C, and D). (It is well known that any <tt>insert</tt>,
- <tt>erase</tt>, <tt>split</tt> or <tt>join</tt>, can restore
- all node invariants by a small number of node invariant updates
- [<a href="references.html#clrs2001">clrs2001</a>].)</p>
-
- <h6 class="c1"><a name="update_seq_diagram" id=
- "update_seq_diagram"><img src="update_seq_diagram.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Insert update sequence diagram.</h6>
-
- <p>To complete the description of the scheme, three questions
- need to be answered:</p>
-
- <ol>
- <li>How can a tree which supports order statistics define a
- method such as <tt>find_by_order</tt>?</li>
-
- <li>How can the node updater base access methods of the
- tree?</li>
-
- <li>How can the following cyclic dependency be resolved?
- <tt>node_update</tt> is a base class of the tree, yet it
- uses node iterators defined in the tree (its child).</li>
- </ol>
-
- <p>The first two questions are answered by the fact that
- <tt>node_update</tt> (an instantiation of
- <tt>Node_Update</tt>) is a <tt><b>public</b></tt> base class
- of the tree. Consequently:</p>
-
- <ol>
- <li>Any public methods of <tt>node_update</tt> are
- automatically methods of the tree [<a href=
- "references.html#alexandrescu01modern">alexandrescu01modern</a>].
- Thus an order-statistics node updater, <a href=
- "tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
- defines the <tt>find_by_order</tt> method; any tree
- instantiated by this policy consequently supports this method
- as well.</li>
-
- <li>In C++, if a base class declares a method as
- <tt><b>virtual</b></tt>, it is <tt><b>virtual</b></tt> in its
- subclasses. If <tt>node_update</tt> needs to access one of
- the tree's methods, say the member function <tt>end</tt>, it simply
- declares that method as <tt><b>virtual</b></tt>
- abstract.</li>
- </ol>
-
- <p>The cyclic dependency is solved through template-template
- parameters. <tt>Node_Update</tt> is parametrized by the tree's node iterators, its comparison
- functor, and its allocator type. Thus,
- instantiations of <tt>Node_Update</tt> have all information required.</p>
-
- <p class="c1"><tt>pb_ds</tt> assumes that constructing a metadata object and modifying it
- are exception free. Suppose that during some method, say
- <tt>insert</tt>, a metadata-related operation
- (<i>e.g.</i>, changing the value of a metadata) throws an
- exception. Ack! Rolling back the method is unusually complex.</p>
-
- <p>In <a href=
- "concepts.html#concepts_null_policies">Interface::Concepts::Null
- Policy Classes</a> a distinction was made between <i>redundant
- policies</i> and <i>null policies</i>. Node invariants show a
- case where null policies are required.</p>
-
- <p>Assume a regular tree is required, one which need not
- support order statistics or interval overlap queries.
- Seemingly, in this case a redundant policy - a policy which
- doesn't affect nodes' contents would suffice. This, would lead
- to the following drawbacks:</p>
-
- <ol>
- <li>Each node would carry a useless metadata object, wasting
- space.</li>
-
- <li>The tree cannot know if its <tt>Node_Update</tt> policy
- actually modifies a node's metadata (this is halting
- reducible). In Figure <a href=
- "#rationale_null_node_update">Useless update path</a> ,
- assume the shaded node is inserted. The tree would have to
- traverse the useless path shown to the root, applying
- redundant updates all the way.</li>
- </ol>
-
- <h6 class="c1"><a name="rationale_null_node_update" id=
- "rationale_null_node_update"><img src=
- "rationale_null_node_update.png" alt="no image" /></a></h6>
-
- <h6 class="c1">Useless update path.</h6>
-
- <p>A null policy class, <a href=
- "null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
- solves both these problems. The tree detects that node
- invariants are irrelevant, and defines all accordingly.</p>
-
- <h2><a name="add_methods" id="add_methods">Additional
- Methods</a></h2>
-
- <p>Tree-based containers support split and join methods.
- It is possible to split a tree so that it passes
- all nodes with keys larger than a given key to a different
- tree. These methods have the following advantages over the
- alternative of externally inserting to the destination
- tree and erasing from the source tree:</p>
-
- <ol>
- <li>These methods are efficient - red-black trees are split
- and joined in poly-logarithmic complexity; ordered-vector
- trees are split and joined at linear complexity. The
- alternatives have super-linear complexity.</li>
-
- <li>Aside from orders of growth, these operations perform
- few allocations and de-allocations. For red-black trees, allocations are not performed,
- and the methods are exception-free. </li>
- </ol>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree::node_iterator Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt><span class=
- "c2"><tt>tree</tt></span>::node_iterator</tt>
- Interface</h1>
-
- <p>Node iterator.</p>
-
- <p>This is an <quote>iterator to an iterator </quote> - it
- iterates over nodes, and de-referencing it returns one of the
- tree's iterators</p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"tree.html#const_node_iterator4205924553"><span class="c2"><tt>tree</tt></span>::const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Methods</a></h2>
-
- <h3><a name="link3" id="link3">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b>
- node_iterator
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"container_base.html#iterator10418194"><span class=
-"c2"><tt>container_base</tt></span>::iterator</a>
- <b>operator</b>*
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Access.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Movement Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <span class="c2"><tt>node_iterator</tt></span>
- get_l_child
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the node iterator associated with the left
- node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <span class="c2"><tt>node_iterator</tt></span>
- get_r_child
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the node iterator associated with the right
- node.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree_order_statistics_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>tree_order_statistics_node_update</tt> Interface</h1>
-
- <p>Functor updating ranks of entrees.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tree_policy.hpp"><tt>tree_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Cmp_Fn294335" id="Cmp_Fn294335"><b>class</b> Cmp_Fn</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="cmp_fn394495" id="cmp_fn394495">cmp_fn</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Cmp_Fn294335"><tt>Cmp_Fn</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Key-type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's key type.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const key reference type.
-</pre>
- </td>
-
- <td>
- <p>Const key reference.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#Const_Node_Iterator1933878761"><tt>Const_Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Iterator4206909839"><tt>Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Const iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Iterator type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Find-Type Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- find_by_order
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> order) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the entry with the order <span class=
- "c1"><tt>order</tt></span>, or a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- find_by_order
- (<a href="#size_type55424436"><tt>size_type</tt></a> order)
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> to the entry
- with the order <span class="c1"><tt>order</tt></span>, or
- an <a href="#iterator10418194"><tt>iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- order_of_key
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the order of a key within a sequence. For
- example, if <span class="c1"><tt>r_key</tt></span> is the
- smallest key, this method will return 0; if <span class=
- "c1"><tt>r_key</tt></span> is a key between the smallest
- and next key, this method will return 1; if <span class=
- "c1"><tt>r_key</tt></span> is a key larger than the
- largest key, this method will return the size of r_c.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Types and
- Constants</a></h2>
-
- <h3><a name="link11" id="link11">Value-type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const reference type.
-</pre>
- </td>
-
- <td>
- <p>Const reference to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const pointer type.
-</pre>
- </td>
-
- <td>
- <p>Const pointer to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_metadata_reference1108857465" id=
-"const_metadata_reference1108857465">const_metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::<a href="#const_reference495461441"><tt>const_reference</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const metadata reference.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_reference583863863" id=
-"metadata_reference583863863">metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p>Metadata reference.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Protected Methods</a></h2>
-
- <h3><a name="link13" id="link13">Operators</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (<a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a> node_it,
- <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a> end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- <span class="c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Constructors, destructor, and
- related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~tree_order_statistics_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link15" id="link15">Private Methods</a></h2>
-
- <h3><a name="link16" id="link16">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with the tree's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with the tree's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#cmp_fn394495"><tt>cmp_fn</tt></a> &
- get_cmp_fn
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Access to the <a href=
- "#cmp_fn394495"><tt>cmp_fn</tt></a> object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Order Statistics Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree Order-Statistics Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test creates a container, inserts random integers into
- the the container, and then checks the order-statistics of the
- container's values. (If the container is one of <tt>pb_ds</tt>
- 's trees, it does this with the <tt>order_of_key</tt> method of
- <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
- ; otherwise, it uses the <tt>find</tt> method and
- <tt>std::distance</tt> .) It measures the average time for such
- queries as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_order_statistics_timing.cc"><tt>tree_order_statistics_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the performance difference of policies based
- on node-invariant as opposed to a external functions. (see
- <a href="tree_based_containers.html#invariants">Design::Associative
- Containers::Tree-Based Containers::Node Invariants</a> .)</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for the native and
- tree-based containers in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_tree_order_statistics_timing_test">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_tree-based_container_order-statistics_queries"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="tree_order_statistics_timing_test_gcc.png" alt="no image" /></a></h6>NTG: Native and tree-based container order-statistics queries - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-<li>
-rb_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_tree_order_statistics_timing_test">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_tree-based_container_order-statistics_queries"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="tree_order_statistics_timing_test_msvc.png" alt="no image" /></a></h6>NTM: Native and tree-based container order-statistics queries - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-<li>
-rb_tree_ost_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_tree_order_statistics_timing_test">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_tree-based_container_order-statistics_queries"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="tree_order_statistics_timing_test_local.png" alt="no image" /></a></h6>NTL: Native and tree-based container order-statistics queries - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this test, the native red-black tree can support
- order-statistics queries only externally, by performing a
- <tt>find</tt> (alternatively, <tt>lower_bound</tt> or
- <tt>upper_bound</tt> ) and then using <tt>std::distance</tt> .
- This is clearly linear, and it is not that surprising that the
- cost is high.</p>
-<p><tt>pb_ds</tt> 's tree-based containers use in this test the
- <tt>order_of_key</tt> method of <a href="tree_order_statistics_node_update.html"><tt>tree_order_statistics_node_update</tt></a>.
- This method has only linear complexity in the length of the
- root-node path. Unfortunately, the average path of a splay tree
- (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) can
- be higher than logarithmic; the longest path of a red-black
- tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a> ) is
- logarithmic in the number of elements. Consequently, the splay
- tree has worse performance than the red-black tree.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based and Trie-Based Text <tt>find</tt> Find Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([<a href="references.html#wickland96thirty">wickland96thirty</a>]) into
- a container, then performs a series of finds using
- <tt>find</tt>. It measures the average time for <tt>find</tt>
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc"><tt>text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTTG">NTTG</a>, <a href="#NTTM">NTTM</a>,
- and <a href="#NTTG">NTTL</a> show the results for the native,
- tree-based, and trie-based types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#local"><u>local</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTTG_res_div">
-<div id="NTTG_gcc">
-<div id="NTTG_random_int_find_find_timing_test_tree">
-<div id="NTTG_assoc">
-<div id="NTTG_Native_456_tree-based_456_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTG" id="NTTG"><img src="random_int_find_find_timing_test_tree_gcc.png" alt="no image" /></a></h6>NTTG: Native, tree-based, random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-<div id="NTTM_res_div">
-<div id="NTTM_msvc">
-<div id="NTTM_random_int_find_find_timing_test_tree">
-<div id="NTTM_assoc">
-<div id="NTTM_Native_456_tree-based_456_random_int_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTM" id="NTTM"><img src="random_int_find_find_timing_test_tree_msvc.png" alt="no image" /></a></h6>NTTM: Native, tree-based, random int find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-<div id="NTTL_res_div">
-<div id="NTTL_local">
-<div id="NTTL_random_int_find_find_timing_test_tree">
-<div id="NTTL_assoc">
-<div id="NTTL_Native_456_tree-based_456_random_int_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTL" id= "NTTL"><img src="random_int_find_find_timing_test_tree_local.png" alt="no image" /></a></h6>NTTL: Native, tree-based, random int find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>For this setting, a splay tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>)
- does not do well. This is possibly due to two
- reasons:</p>
-<ol>
-<li>A splay tree is not guaranteed to be balanced
- [<a href="references.html#motwani95random">motwani95random</a>].
- If a splay tree contains <i>n</i> nodes, its
- average root-leaf path can be <i>m >>
- log(n)</i>.</li>
-<li>Assume a specific root-leaf search path has
- length <i>m</i>, and the search-target node has
- distance <i>m'</i> from the root. A red-black
- tree will require <i>m + 1</i> comparisons to
- find the required node; a splay tree will require
- <i>2 m'</i> comparisons. A splay tree,
- consequently, can perform many more comparisons
- than a red-black tree.</li>
-</ol>
-<p>An ordered-vector tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>),
- a red-black tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>rb_tree_tag</tt></a>),
- and the native red-black tree all share
- approximately the same performance.</p>
-<p>An ordered-vector tree is slightly slower than
- red-black trees, since it requires, in order to
- find a key, more math operations than they do.
- Conversely, an ordered-vector tree requires far
- lower space than the others. ([<a href="references.html#austern00noset">austern00noset</a>],
- however, seems to have an implementation that is
- also faster than a red-black tree).</p>
-<p>A PATRICIA trie (<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag =</tt> <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>)
- has good look-up performance, due to its large
- fan-out in this case. In this setting, a PATRICIA
- trie has lookup performance comparable to a hash
- table (see <a href="hash_text_find_find_timing_test.html">Hash-Based
- Text <tt>find</tt> Find Timing Test</a>), but it is
- order preserving. This is not that surprising,
- since a large fan-out PATRICIA trie works like a
- hash table with collisions resolved by a sub-trie.
- A large fan-out PATRICIA trie does not do well on
- modifications (see <a href="tree_text_insert_timing_test.html">Tree-Based and
- Trie-Based Text Insert Timing Test</a>). It is
- possibly beneficial to semi-static settings,
- therefore.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">
- Observations::Tree-Like-Based Container Types</a>
- summarizes some observations on tree-based and
- trie-based containers.</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Split Join Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree Split-Join Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test a container, inserts into a number of values,
- splits the container at the median, and joins the two
- containers. (If the containers are one of <tt>pb_ds</tt> 's
- trees, it splits and joins with the <tt>split</tt> and
- <tt>join</tt> method; otherwise, it uses the <tt>erase</tt> and
- <tt>insert</tt> methods.) It measures the time for splitting
- and joining the containers as a function of the number of
- values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_split_join_timing.cc"><tt>tree_split_join_timing_test</tt></a>
- 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the performance difference of <tt>join</tt>
- as opposed to a sequence of <tt>insert</tt> operations; by
- implication, this test checks the most efficient way to erase a
- sub-sequence from a tree-like-based container, since this can
- always be performed by a small sequence of splits and joins
- (see <a href="motivation.html#assoc_split_join_methods">Motivation::Associative
- Containers::Slightly Different Methods::Methods Related to
- Split and Join</a> and <a href="tree_based_containers.html#add_methods">Design::Associative
- Containers::Tree-Based Containers::Additional Methods</a>
- .)</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for the native and
- tree-based containers in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_tree_split_join_timing_test">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_tree-based_container_splits_and_joins"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="tree_split_join_timing_test_gcc.png" alt="no image" /></a></h6>NTG: Native and tree-based container splits and joins - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_tree_split_join_timing_test">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_tree-based_container_splits_and_joins"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="tree_split_join_timing_test_msvc.png" alt="no image" /></a></h6>NTM: Native and tree-based container splits and joins - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_set-
-<tt>std::set</tt></li>
-<li>
-splay_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_set-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_tree_split_join_timing_test">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_tree-based_container_splits_and_joins"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="tree_split_join_timing_test_local.png" alt="no image" /></a></h6>NTL: Native and tree-based container splits and joins - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>In this test, the native red-black trees must be split and
- joined externally, through a sequence of <tt>erase</tt> and
- <tt>insert</tt> operations. This is clearly super-linear, and
- it is not that surprising that the cost is high.</p>
-<p><tt>pb_ds</tt> 's tree-based containers use in this test the
- <tt>split</tt> and <tt>join</tt> methods, which have lower
- complexity: the <tt>join</tt> method of a splay tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) is
- quadratic in the length of the longest root-leaf path, and
- linear in the total number of elements; the <tt>join</tt>
- method of a red-black tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a> ) or an
- ordered-vector tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a> ) is linear
- in the number of elements.</p>
-<p>Asides from orders of growth, <tt>pb_ds</tt> 's trees access
- their allocator very little in these operations, and some of
- them do not access it at all. This leads to lower constants in
- their complexity, and, for some containers, to exception-free
- splits and joins (which can be determined via <a href="assoc_container_traits.html"><tt>container_traits</tt></a>).</p>
-<p>It is important to note that <tt>split</tt> and
- <tt>join</tt> are not esoteric methods - they are the most
- efficient means of erasing a contiguous range of values from a
- tree based container.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>tree_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>tree_tag</tt> Interface</h1>
-
- <p>Basic tree data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_tree_tag.html"><span class=
-"c2"><tt>basic_tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based and Trie-Based Text <tt>find</tt> Find Timing
- Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([<a href="references.html#wickland96thirty">wickland96thirty</a>]) into
- a container, then performs a series of finds using
- <tt>find</tt>. It measures the average time for <tt>find</tt>
- as a function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/text_find_timing.cc"><tt>text_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTTG">NTTG</a>, <a href="#NTTM">NTTM</a>,
- and <a href="#NTTG">NTTL</a> show the results for the native,
- tree-based, and trie-based types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#local"><u>local</u></a>, and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTTG_res_div">
-<div id="NTTG_gcc">
-<div id="NTTG_text_find_timing_test_tree_like">
-<div id="NTTG_assoc">
-<div id="NTTG_Native_456_tree-based_456_and_trie-based_456_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTG" id="NTTG"><img src="text_find_timing_test_tree_like_gcc.png" alt="no image" /></a></h6>NTTG: Native, tree-based, and trie-based, text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTTM_res_div">
-<div id="NTTM_msvc">
-<div id="NTTM_text_find_timing_test_tree_like">
-<div id="NTTM_assoc">
-<div id="NTTM_Native_456_tree-based_456_and_trie-based_456_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTM" id="NTTM"><img src="text_find_timing_test_tree_like_msvc.png" alt="no image" /></a></h6>NTTM: Native, tree-based, and trie-based, text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTTL_res_div">
-<div id="NTTL_local">
-<div id="NTTL_text_find_timing_test_tree_like">
-<div id="NTTL_assoc">
-<div id="NTTL_Native_456_tree-based_456_and_trie-based_456_text_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTTL" id= "NTTL"><img src="text_find_timing_test_tree_like_local.png" alt="no image" /></a></h6>NTTL: Native, tree-based, and trie-based, text find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>For this setting, a splay tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>) does
- not do well. This is possibly due to two reasons:</p>
-<ol>
-<li>A splay tree is not guaranteed to be balanced [<a href="references.html#motwani95random">motwani95random</a>]. If a
- splay tree contains <i>n</i> nodes, its average root-leaf
- path can be <i>m >> log(n)</i>.</li>
-<li>Assume a specific root-leaf search path has length
- <i>m</i>, and the search-target node has distance <i>m'</i>
- from the root. A red-black tree will require <i>m + 1</i>
- comparisons to find the required node; a splay tree will
- require <i>2 m'</i> comparisons. A splay tree, consequently,
- can perform many more comparisons than a red-black tree.</li>
-</ol>
-<p>An ordered-vector tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>), a red-black
- tree (<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>rb_tree_tag</tt></a>), and the
- native red-black tree all share approximately the same
- performance.</p>
-<p>An ordered-vector tree is slightly slower than red-black
- trees, since it requires, in order to find a key, more math
- operations than they do. Conversely, an ordered-vector tree
- requires far lower space than the others. ([<a href="references.html#austern00noset">austern00noset</a>], however,
- seems to have an implementation that is also faster than a
- red-black tree).</p>
-<p>A PATRICIA trie (<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag =</tt> <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>) has good
- look-up performance, due to its large fan-out in this case. In
- this setting, a PATRICIA trie has look-up performance comparable
- to a hash table (see <a href="hash_text_find_find_timing_test.html">Hash-Based Text
- <tt>find</tt> Find Timing Test</a>), but it is order
- preserving. This is not that surprising, since a large-fan-out
- PATRICIA trie works like a hash table with collisions resolved
- by a sub-trie. A large-fan-out PATRICIA trie does not do well on
- modifications (see <a href="tree_text_insert_timing_test.html">Tree-Based and Trie-Based
- Text Insert Timing Test</a>). It is possibly beneficial to
- semi-static settings, therefore.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">Observations::Tree-Like-Based
- Container Types</a> summarizes some observations on tree-based
- and trie-based containers.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Insert Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based and Trie-Based Text Insert Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container using <tt>insert</tt> . It measures the average
- time for <tt>insert</tt> as a function of the number of values
- inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_text_insert_timing.cc"><tt>tree_text_insert_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NNTG">NNTG</a>, <a href="#NVTG">NVTG</a>,
- and <a href="#NPTG">NPTG</a> show the results for the native
- tree and <tt>pb_ds</tt>'s node-based trees, the native tree and
- <tt>pb_ds</tt>'s vector-based trees, and the native tree
- and<tt>pb_ds</tt>'s PATRICIA-trie, respectively, in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>; Figures
- <a href="#NNTM">NNTM</a>, <a href="#NVTM">NVTM</a>, and
- <a href="#NPTM">NPTM</a> show the same in <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a>; Figures
- <a href="#NNTL">NNTL</a>, <a href="#NVTL">NVTL</a>, and
- <a href="#NPTL">NPTL</a> show the same in <a href="assoc_performance_tests.html#local"><u>local</u></a>.</p>
-<div id="NNTG_res_div">
-<div id="NNTG_gcc">
-<div id="NNTG_tree_text_insert_timing_test_node_tree">
-<div id="NNTG_assoc">
-<div id="NNTG_Native_tree_and_node-based_trees_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NNTG" id="NNTG"><img src="tree_text_insert_timing_test_node_tree_gcc.png" alt="no image" /></a></h6>NNTG: Native tree and node-based trees text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NVTG_res_div">
-<div id="NVTG_gcc">
-<div id="NVTG_tree_text_insert_timing_test_vector_tree">
-<div id="NVTG_assoc">
-<div id="NVTG_Native_tree_and_vector-based_tree_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NVTG" id="NVTG"><img src="tree_text_insert_timing_test_vector_tree_gcc.png" alt="no image" /></a></h6>NVTG: Native tree and vector-based tree text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPTG_res_div">
-<div id="NPTG_gcc">
-<div id="NPTG_tree_text_insert_timing_test_pat_trie">
-<div id="NPTG_assoc">
-<div id="NPTG_Native_tree_and_PATRICIA_trie_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPTG" id="NPTG"><img src="tree_text_insert_timing_test_pat_trie_gcc.png" alt="no image" /></a></h6>NPTG: Native tree and PATRICIA trie text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NNTM_res_div">
-<div id="NNTM_msvc">
-<div id="NNTM_tree_text_insert_timing_test_node_tree">
-<div id="NNTM_assoc">
-<div id="NNTM_Native_tree_and_node-based_trees_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NNTM" id="NNTM"><img src="tree_text_insert_timing_test_node_tree_msvc.png" alt="no image" /></a></h6>NNTM: Native tree and node-based trees text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NVTM_res_div">
-<div id="NVTM_msvc">
-<div id="NVTM_tree_text_insert_timing_test_vector_tree">
-<div id="NVTM_assoc">
-<div id="NVTM_Native_tree_and_vector-based_tree_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NVTM" id="NVTM"><img src="tree_text_insert_timing_test_vector_tree_msvc.png" alt="no image" /></a></h6>NVTM: Native tree and vector-based tree text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPTM_res_div">
-<div id="NPTM_msvc">
-<div id="NPTM_tree_text_insert_timing_test_pat_trie">
-<div id="NPTM_assoc">
-<div id="NPTM_Native_tree_and_PATRICIA_trie_text_insert_timing_test_using__tt_insert_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPTM" id="NPTM"><img src="tree_text_insert_timing_test_pat_trie_msvc.png" alt="no image" /></a></h6>NPTM: Native tree and PATRICIA trie text insert timing test using <tt>insert</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-pat_trie_map-
-<a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag</tt> = <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NNTL_res_div">
-<div id="NNTL_local">
-<div id="NNTL_tree_text_insert_timing_test_node_tree">
-<div id="NNTL_assoc">
-<div id="NNTL_Native_tree_and_node-based_trees_text_insert_timing_test_using__tt_insert_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NNTL" id= "NNTL"><img src="tree_text_insert_timing_test_node_tree_local.png" alt="no image" /></a></h6>NNTL: Native tree and node-based trees text insert timing test using <tt>insert</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NVTL_res_div">
-<div id="NVTL_local">
-<div id="NVTL_tree_text_insert_timing_test_vector_tree">
-<div id="NVTL_assoc">
-<div id="NVTL_Native_tree_and_vector-based_tree_text_insert_timing_test_using__tt_insert_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NVTL" id= "NVTL"><img src="tree_text_insert_timing_test_vector_tree_local.png" alt="no image" /></a></h6>NVTL: Native tree and vector-based tree text insert timing test using <tt>insert</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NPTL_res_div">
-<div id="NPTL_local">
-<div id="NPTL_tree_text_insert_timing_test_pat_trie">
-<div id="NPTL_assoc">
-<div id="NPTL_Native_tree_and_PATRICIA_trie_text_insert_timing_test_using__tt_insert_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NPTL" id= "NPTL"><img src="tree_text_insert_timing_test_pat_trie_local.png" alt="no image" /></a></h6>NPTL: Native tree and PATRICIA trie text insert timing test using <tt>insert</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>Observing Figure <a href="#NNTG">NNTG</a> , for this
- setting, a splay tree, ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) does
- not do well. This was covered in <a href="tree_text_find_find_timing_test.html">Tree-Based and
- Trie-Based Text <tt>find</tt> Find Timing Test</a> . The two
- red-black trees perform better.</p>
-<p>Observing Figure <a href="#NVTG">NVTG</a>, an ordered-vector
- tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>) performs
- abysmally. Inserting into this type of tree has linear
- complexity [ <a href="references.html#austern00noset">austern00noset</a>].</p>
-<p>Observing Figure <a href="#NPTG">NPTG</a> , A PATRICIA trie
- ( <a href="trie.html"><tt>trie</tt></a>
- with <tt>Tag =</tt> <a href="pat_trie_tag.html"><tt>pat_trie_tag</tt></a> ) has
- abysmal performance, as well. This is not that surprising,
- since a large-fan-out PATRICIA trie works like a hash table with
- collisions resolved by a sub-trie. Each time a collision is
- encountered, a new "hash-table" is built A large fan-out
- PATRICIA trie, however, doe does well in look-ups (see <a href="tree_text_find_find_timing_test.html">Tree-Based and
- Trie-Based Text <tt>find</tt> Find Timing Test</a> ). It is
- possibly beneficial to semi-static settings, therefore.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">Observations::Tree-Like-Based
- Container Types</a> summarizes some observations on tree-based
- and trie-based containers.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta name="generator" content="HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-<title>Tree Text Locality of Reference Find Timing Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
-</head>
-<body>
-<div id="page">
-<h1>Tree-Based Locality-of-Reference Text <tt>find</tt> Find
- Timing Test</h1>
-<h2><a name="description" id="description">Description</a></h2>
-<p>This test inserts a number of values with keys from an
- arbitrary text ([ <a href="references.html#wickland96thirty">wickland96thirty</a> ]) into
- a container, then performs a series of finds using
- <tt>find</tt> . It is different than <a href="tree_text_find_find_timing_test.html">Tree-Based and
- Trie-Based Text <tt>find</tt> Find Timing Test</a> in the
- sequence of finds it performs: this test performs multiple
- <tt>find</tt> s on the same key before moving on to the next
- key. It measures the average time for <tt>find</tt> as a
- function of the number of values inserted.</p>
-<p>(The test was executed with <a href="http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find_timing.cc"><tt>tree_text_lor_find_timing_test</tt></a>
- thirty_years_among_the_dead_preproc.txt 200 200 2100)</p>
-<h2><a name="purpose" id="purpose">Purpose</a></h2>
-<p>The test checks the effect of different underlying
- data structures in a locality-of-reference setting.</p>
-<h2><a name="results" id="results">Results</a></h2>
-<p>Figures <a href="#NTG">NTG</a>, <a href="#NTM">NTM</a>, and
- <a href="#NTL">NTL</a> show the results for the native and
- <tt>pb_ds</tt> tree-based types in <a href="assoc_performance_tests.html#gcc"><u>g++</u></a>, <a href="assoc_performance_tests.html#msvc"><u>msvc++</u></a> and
- <a href="assoc_performance_tests.html#local"><u>local</u></a>,
- respectively.</p>
-<div id="NTG_res_div">
-<div id="NTG_gcc">
-<div id="NTG_tree_text_lor_find_timing_test">
-<div id="NTG_assoc">
-<div id="NTG_Native_and_tree-based_locality-of-reference_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTG" id="NTG"><img src="tree_text_lor_find_timing_test_gcc.png" alt="no image" /></a></h6>NTG: Native and tree-based locality-of-reference text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#gcc">g++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTM_res_div">
-<div id="NTM_msvc">
-<div id="NTM_tree_text_lor_find_timing_test">
-<div id="NTM_assoc">
-<div id="NTM_Native_and_tree-based_locality-of-reference_text_find_timing_test_using__tt_find_455tt_"><div style="border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTM" id="NTM"><img src="tree_text_lor_find_timing_test_msvc.png" alt="no image" /></a></h6>NTM: Native and tree-based locality-of-reference text find timing test using <tt>find</tt> - <a href="assoc_performance_tests.html#msvc">msvc++</a><p>In the above figure, the names in the legends have the following meaning:</p>
-<ol>
-<li>
-ov_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-rb_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="rb_tree_tag.html"><tt>rb_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-<li>
-n_map-
-<tt>std::map</tt></li>
-<li>
-splay_tree_map-
-<a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag</tt> = <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a>
-, and <tt>Node_Update</tt> = <a href="null_tree_node_update.html"><tt>null_tree_node_update</tt></a>
-</li>
-</ol>
-</div><div style="width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<div id="NTL_res_div">
-<div id="NTL_local">
-<div id="NTL_tree_text_lor_find_timing_test">
-<div id="NTL_assoc">
-<div id="NTL_Native_and_tree-based_locality-of-reference_text_find_timing_test_using__tt_find_455tt_"><div style = "border-style: dotted; border-width: 1px; border-color: lightgray"><h6 class="c1"><a name="NTL" id= "NTL"><img src="tree_text_lor_find_timing_test_local.png" alt="no image" /></a></h6>NTL: Native and tree-based locality-of-reference text find timing test using <tt>find</tt> - <a href = "assoc_performance_tests.html#local">local</a></div><div style = "width: 100%; height: 20px"></div></div>
-</div>
-</div>
-</div>
-</div>
-<h2><a name="observations" id="observations">Observations</a></h2>
-<p>For this setting, an ordered-vector tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="ov_tree_tag.html"><tt>ov_tree_tag</tt></a> ), a
- red-black tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>rb_tree_tag</tt></a> ), and the
- native red-black tree all share approximately the same
- performance.</p>
-<p>A splay tree ( <a href="tree.html"><tt>tree</tt></a>
- with <tt>Tag =</tt> <a href="splay_tree_tag.html"><tt>splay_tree_tag</tt></a> ) does
- much better, since each (successful) find "bubbles" the
- corresponding node to the root of the tree.</p>
-<p><a href="assoc_performance_tests.html#tree_like_based_types">Observations::Tree-Like-Based
- Container Types</a> summarizes some observations on tree-based
- and trie-based containers.</p>
-</div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie</tt> Interface</h1>
-
- <p>A concrete basic trie-based associative container.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/assoc_container.hpp"><tt>assoc_container.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Key2501" id="Key2501"><b>typename</b> Key</a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Mapped318655" id="Mapped318655"><b>typename</b> Mapped</a>
-</pre>
- </td>
-
- <td>
- <p>Mapped type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits </a>
-</pre>
- </td>
-
- <td>
- <p>Element-access traits.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Tag278938" id="Tag278938"><b>class</b> Tag </a>
-</pre>
- </td>
-
- <td>
- <p>Data-structure tag.</p>
- </td>
-
- <td><a href="pat_trie_tag.html"><span class=
- "c2"><tt>pat_trie_tag</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Update841554648" id=
-"Node_Update841554648"><b>template</b><
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>class</b> E_Access_Traits_,
- <b>typename</b> Allocator_>
-<b>class</b> Node_Update </a>
-</pre>
- </td>
-
- <td>
- <p>Node updater type.</p>
-
- <p><a href=
- "tree_based_containers.html#invariants">Design::Tree-Based
- Containers::Node Invariants</a> explains this
- concept.</p>
- </td>
-
- <td><a href="null_trie_node_update.html"><span class=
- "c2"><tt>null_trie_node_update</tt></span></a></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"trie_const_node_iterator.html"><span class=
-"c2"><tt>const_node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="trie_node_iterator.html"><span class=
-"c2"><tt>node_iterator</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
- trie
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- trie
- (<b>const</b> <a href=
-"#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a> &r_e_access_traits)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking some policy objects. <span class=
- "c1"><tt>r_e_access_traits</tt></span> will be copied by
- the <a href=
- "#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
- object of the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- trie
- (It first_it,
- It last_it)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of
- value_types. The value_types between <span class=
- "c1"><tt>first_it</tt></span> and <span class=
- "c1"><tt>last_it</tt></span> will be inserted into the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>template</b><
- <b>class</b> It>
- trie
- (It first_it,
- It last_it,
- <b>const</b> <a href=
-"#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a> &r_e_access_traits)
-</pre>
- </td>
-
- <td>
- <p>Constructor taking iterators to a range of value_types
- and some policy objects. The value_types between
- <span class="c1"><tt>first_it</tt></span> and
- <span class="c1"><tt>last_it</tt></span> will be inserted
- into the container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
- trie
- (<b>const</b> <span class=
-"c2"><tt>trie</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Copy constructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~trie
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>trie</tt></span> &
- <b>operator</b>=
- (<b>const</b> <span class=
-"c2"><tt>trie</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Assignment operator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>void</b>
- swap
- (<span class=
-"c2"><tt>trie</tt></span> &other)
-</pre>
- </td>
-
- <td>
- <p>Swaps content.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Policy Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &
- get_e_access_traits
- ()
-</pre>
- </td>
-
- <td>
- <p>Access to the comb_hash_fn object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &
- get_e_access_traits
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access to the comb_hash_fn object.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Node-Iteration Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to the node at the root of the trie.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to the node at the root of the trie.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- ()
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- trie.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- corresponding to a node just after a leaf of the
- trie.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Trie-Based Containers</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Trie Design</h1>
-
- <h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>The trie-based container has the following declaration:</p>
- <pre>
-<b>template</b><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Cmp_Fn = std::less<Key>,
- <b>typename</b> Tag = <a href="pat_trie_tag.html">pat_trie_tag</a>,
- <b>template</b><
- <b>typename</b> Const_Node_Iterator,
- <b>typename</b> Node_Iterator,
- <b>typename</b> E_Access_Traits_,
- <b>typename</b> Allocator_>
- <b>class</b> Node_Update = <a href=
-"null_trie_node_update.html">null_trie_node_update</a>,
- <b>typename</b> Allocator = std::allocator<<b>char</b>> >
-<b>class</b> <a href=
-"trie.html">trie</a>;
-</pre>
-
- <p>The parameters have the following meaning:</p>
-
- <ol>
- <li><tt>Key</tt> is the key type.</li>
-
- <li><tt>Mapped</tt> is the mapped-policy, and is explained in
- <a href="tutorial.html#assoc_ms">Tutorial::Associative
- Containers::Associative Containers Others than Maps</a>.</li>
-
- <li><tt>E_Access_Traits</tt> is described in <a href=
- "#e_access_traits">Element-Access Traits</a>.</li>
-
- <li><tt>Tag</tt> specifies which underlying data structure
- to use, and is described shortly.</li>
-
- <li><tt>Node_Update</tt> is a policy for updating node
- invariants. This is described in <a href="#invariants">Node
- Invariants</a>.</li>
-
- <li><tt>Allocator</tt> is an allocator
- type.</li>
- </ol>
-
- <p>The <tt>Tag</tt> parameter specifies which underlying
- data structure to use. Instantiating it by <a href=
- "pat_trie_tag.html">pat_trie_tag</a>, specifies an
- underlying PATRICIA trie (explained shortly); any other tag is
- currently illegal.</p>
- <hr />
-
- <p>Following is a description of a (PATRICIA) trie
- (<tt>pb_ds</tt> follows specifically [<a href=
- "references.html#okasaki98mereable">okasaki98mereable</a>] and
- [<a href=
- "references.html#filliatre2000ptset">filliatre2000ptset</a>]).</p>
-
- <p>A (PATRICIA) trie is similar to a tree, but with the
- following differences:</p>
-
- <ol>
- <li>It explicitly views keys as a sequence of elements.
- <i>E.g.</i>, a trie can view a string as a sequence of
- characters; a trie can view a number as a sequence of
- bits.</li>
-
- <li>It is not (necessarily) binary. Each node has fan-out <i>n
- + 1</i>, where <i>n</i> is the number of distinct
- elements.</li>
-
- <li>It stores values only at leaf nodes.</li>
-
- <li>Internal nodes have the properties that A) each has at
- least two children, and B) each shares the same prefix with
- any of its descendant.</li>
- </ol>
-
- <p><a href="#e_access_traits">Element-Access Traits</a> shows
- an example of such a trie.</p>
-
- <p>A (PATRICIA) trie has some useful properties:</p>
-
- <ol>
- <li>It can be configured to use large node fan-out, giving it
- very efficient find performance (albeit at insertion
- complexity and size).</li>
-
- <li>It works well for common-prefix keys.</li>
-
- <li>It can support efficiently queries such as which keys
- match a certain prefix. This is sometimes useful in
- file systems and routers.</li>
- </ol>
-
- <p>(We would like to thank Matt Austern for the suggestion to
- include tries.)</p>
-
- <h2><a name="e_access_traits" id=
- "e_access_traits">Element-Access Traits</a></h2>
-
- <p>A trie inherently views its keys as sequences of elements.
- For example, a trie can view a string as a sequence of
- characters. A trie needs to map each of <i>n</i> elements to a
- number in <i>{0, n - 1}</i>. For example, a trie can map a
- character <tt>c</tt> to
- <tt>static_cast<size_t>(c)</tt>.</p>
-
- <p>Seemingly, then, a trie can assume that its keys support
- (const) iterators, and that the <tt>value_type</tt> of this
- iterator can be cast to a <tt>size_t</tt>. There are several
- reasons, though, to decouple the mechanism by which the trie
- accesses its keys' elements from the trie:</p>
-
- <ol>
- <li>In some cases, the numerical value of an element is
- inappropriate. Consider a trie storing DNA strings. It is
- logical to use a trie with a fan-out of <i>5 = 1 + |{'A', 'C',
- 'G', 'T'}|</i>. This requires mapping 'T' to 3, though.</li>
-
- <li>In some cases the keys' iterators are different than what
- is needed. For example, a trie can be used to search for
- common <u>suffixes</u>, by using strings'
- <tt>reverse_iterator</tt>. As another example, a trie mapping
- UNICODE strings would have a huge fan-out if each node would
- branch on a UNICODE character; instead, one can define an
- iterator iterating over 8-bit (or less) groups.</li>
- </ol>
-
- <p><a href=
- "trie.html">trie</a> is,
- consequently, parametrized by <tt>E_Access_Traits</tt> -
- traits which instruct how to access sequences' elements.
- <a href=
- "string_trie_e_access_traits.html"><tt>string_trie_e_access_traits</tt></a>
- is a traits class for strings. Each such traits define some
- types, <i>e.g.</i>,</p>
- <pre>
-<b>typename</b> E_Access_Traits::const_iterator
-</pre>
-
- <p>is a const iterator iterating over a key's elements. The
- traits class must also define methods for obtaining an iterator
- to the first and last element of a key.</p>
-
- <p>Figure <a href="#pat_trie">A PATRICIA trie</a> shows a
- (PATRICIA) trie resulting from inserting the words: "I wish
- that I could ever see a poem lovely as a trie" (which,
- unfortunately, does not rhyme).</p>
-
- <p>The leaf nodes contain values; each internal node contains
- two <tt><b>typename</b> E_Access_Traits::const_iterator</tt>
- objects, indicating the maximal common prefix of all keys in
- the sub-tree. For example, the shaded internal node roots a
- sub-tree with leafs "a" and "as". The maximal common prefix is
- "a". The internal node contains, consequently, to const
- iterators, one pointing to <tt>'a'</tt>, and the other to
- <tt>'s'</tt>.</p>
-
- <h6 class="c1"><a name="pat_trie" id="pat_trie"><img src=
- "pat_trie.png" alt="no image" /></a></h6>
-
- <h6 class="c1">A PATRICIA trie.</h6>
-
- <h2><a name="invariants" id="invariants">Node
- Invariants</a></h2>
-
- <p>Trie-based containers support node invariants, as do
- tree-based containers (see <a href=
- "tree_based_containers.html#invariants">Tree-Based
- Containers::Node Invariants</a>). There are two minor
- differences, though, which, unfortunately, thwart sharing them
- sharing the same node-updating policies:</p>
-
- <ol>
- <li>A trie's <tt>Node_Update</tt> template-template
- parameter is parametrized by <tt>E_Access_Traits</tt>, while
- a tree's <tt>Node_Update</tt> template-template parameter is
- parametrized by <tt>Cmp_Fn</tt>.</li>
-
- <li>Tree-based containers store values in all nodes, while
- trie-based containers (at least in this implementation) store
- values in leafs.</li>
- </ol>
-
- <p>Figure <a href="#trie_node_update_cd">A trie and its update
- policy</a> shows the scheme, as well as some predefined
- policies (which are explained below).</p>
-
- <h6 class="c1"><a name="trie_node_update_cd" id=
- "trie_node_update_cd"><img src=
- "trie_node_update_policy_cd.png" alt="no image" /></a></h6>
-
- <h6 class="c1">A trie and its update policy.</h6>
-
- <p><tt>pb_ds</tt> offers the following pre-defined trie node
- updating policies:</p>
-
- <ol>
- <li><a href=
- "trie_order_statistics_node_update.html"><tt>trie_order_statistics_node_update</tt></a>
- supports order statistics.</li>
-
- <li><a href=
- "trie_prefix_search_node_update.html"><tt>trie_prefix_search_node_update</tt></a>
- supports searching for ranges that match a given prefix. See
- <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc"><tt>trie_prefix_search.cc</tt></a>.</li>
-
- <li><a href=
- "null_trie_node_update.html"><tt>null_trie_node_update</tt></a>
- is the null node updater.</li>
- </ol>
-
- <h2><a name="add_methods" id="add_methods">Additional
- Methods</a></h2>
-
- <p>Trie-based containers support split and join methods; the
- rationale is equal to that of tree-based containers supporting
- these methods (see <a href=
- "tree_based_containers.html#add_methods">Tree-Based
- Containers::Additional Methods</a>).</p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie::const_node_iterator
- Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt><span class=
- "c2"><tt>trie</tt></span>::const_node_iterator</tt>
- Interface</h1>
-
- <p>Const node iterator.</p>
-
- <p>This is an "iterator to an iterator" - it iterates over
- nodes, and de-referencing it returns one of the tree's const
- iterators</p>
-
- <h2><a name="link1" id="link1">Public Types and
- Constants</a></h2>
-
- <h3><a name="link2" id="link2">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="container_base.html#size_type55424436"><span class=
-"c2"><tt>container_base</tt></span>::size_type</a>
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link3" id="link3">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator_category2821876439" id=
-"iterator_category2821876439">iterator_category</a>
-</pre>
- </td>
-
- <td>
- <pre>
-trivial_iterator_tag
-</pre>
- </td>
-
- <td>
- <p>Category.</p>
-
- <p>This tag identifies that the iterator has none of the
- STL's iterators' movement abilities.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="difference_type868028452" id=
-"difference_type868028452">difference_type</a>
-</pre>
- </td>
-
- <td>
- <pre class="c2">
-void
-</pre>
- </td>
-
- <td>
- <p>Difference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"container_base.html#const_iterator98626788"><span class="c2"><tt>container_base</tt></span>::const_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's const <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"trie.html#e_access_traits1948190928"><span class="c2"><tt>trie</tt></span>::e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_e_iterator2450008044" id=
-"const_e_iterator2450008044">const_e_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>A key's element const iterator.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Metadata Definitions</a></h3>
-
- <p>These are only defined if <a href=
- "basic_tree.html#Node_Update841554648"><span class="c2">
- <tt>basic_tree</tt></span>::Node_Update</a>
- is not <a href="null_trie_node_update.html"><span class=
- "c2"><tt>null_trie_node_update</tt></span></a></p>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<tt><b>typename</b></tt> <a href=
-"basic_tree.html#Node_Update841554648"><span class="c2"><tt>basic_tree</tt></span>::Node_Update</a><tt>::metadata_type</tt>
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_metadata_reference1108857465" id=
-"const_metadata_reference1108857465">const_metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> Allocator::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::<a href="#const_reference495461441"><tt>const_reference</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const metadata <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b>
- const_node_iterator
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> std::pair<
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a>,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a>>
- valid_prefix
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Subtree valid prefix.</p>
-
- <p>Returns the common prefix range of all nodes in this
- node's subtree.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_reference495461441"><tt>const_reference</tt></a>
- <b>operator</b>*
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Const access; returns the const iterator associated
- with the current leaf.</p>
-
- <p>Should be called only for leaf nodes.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link9" id="link9">Metadata Access Methods</a></h3>
-
- <p>These are only defined if <a href=
- "basic_tree.html#Node_Update841554648"><span class="c2">
- <tt>basic_tree</tt></span>::Node_Update</a>
- is not <a href="null_trie_node_update.html"><span class=
- "c2"><tt>null_trie_node_update</tt></span></a></p>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_metadata_reference1108857465"><tt>const_metadata_reference</tt></a>
- get_metadata
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Metadata access.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link10" id="link10">Movement Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- num_children
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the number of children in the corresponding
- node.</p>
-
- <p>If the number of children is 0, then the corresponding
- node is a leaf; otherwise, it is not a leaf.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>const_node_iterator</tt></span>
- get_child
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a const node iterator to the corresponding
- node's <span class="c1"><tt>i</tt></span>-th child.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link11" id="link11">Comparison Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- <b>operator</b>==
- (<b>const</b> <span class=
-"c2"><tt>const_node_iterator</tt></span> &other) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Compares content to a different iterator object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>bool</b>
- <b>operator</b>!=
- (<b>const</b> <span class=
-"c2"><tt>const_node_iterator</tt></span> &other) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Compares content (negatively) to a different iterator
- object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie::node_iterator Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt><span class=
- "c2"><tt>trie</tt></span>::node_iterator</tt>
- Interface</h1>
-
- <p>Node iterator.</p>
-
- <p>This is an "iterator to an iterator" - it iterates over
- nodes, and de-referencing it returns one of the tree's
- iterators</p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href=
-"trie.html#const_node_iterator4205924553"><span class="c2"><tt>trie</tt></span>::const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Container
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"trie.html#const_node_iterator4205924553"><span class="c2"><tt>trie</tt></span>::const_node_iterator</a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Value-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="value_type279018186" id=
-"value_type279018186">value_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="container_base.html#iterator10418194"><span class=
-"c2"><tt>container_base</tt></span>::iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's value type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reference54418471" id="reference54418471">reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's reference type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#value_type279018186"><tt>value_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Iterator's const <a href=
- "#reference54418471"><tt>reference</tt></a> type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link5" id="link5">Public Methods</a></h2>
-
- <h3><a name="link6" id="link6">Constructors, Destructor, and
- Related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b>
- pat_trie_node_it_
- ()
-</pre>
- </td>
-
- <td>
- <p>Default constructor.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#reference54418471"><tt>reference</tt></a>
- <b>operator</b>*
- () <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Access; returns the iterator associated with the
- current leaf.</p>
-
- <p>Should be called only for leaf nodes.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link8" id="link8">Movement Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<span class="c2"><tt>node_iterator</tt></span>
- get_child
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> i) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns a node iterator to the corresponding node's
- <span class="c1"><tt>i</tt></span>-th child.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie_order_statistics_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie_order_statistics_node_update</tt> Interface</h1>
-
- <p>Functor updating ranks of entrees.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_e_iterator2450008044" id=
-"const_e_iterator2450008044">const_e_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>Const element iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's key type.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const key reference type.
-</pre>
- </td>
-
- <td>
- <p>Const key reference.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#size_type55424436"><tt>size_type</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#Const_Node_Iterator1933878761"><tt>Const_Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Iterator4206909839"><tt>Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Const iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Iterator type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Find-Type Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- find_by_order
- (<a href=
-"#size_type55424436"><tt>size_type</tt></a> order) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the entry with the order <span class=
- "c1"><tt>order</tt></span>, or a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- find_by_order
- (<a href="#size_type55424436"><tt>size_type</tt></a> order)
-</pre>
- </td>
-
- <td>
- <p>Finds an entry by order. Returns an <a href=
- "#iterator10418194"><tt>iterator</tt></a> to the entry
- with the order <span class="c1"><tt>order</tt></span>, or
- an <a href="#iterator10418194"><tt>iterator</tt></a> to
- the container object's end if <span class=
- "c1"><tt>order</tt></span> is at least the size of the
- container object.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- order_of_key
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the order of a key within a sequence. For
- example, if <span class="c1"><tt>r_key</tt></span> is the
- smallest key, this method will return 0; if <span class=
- "c1"><tt>r_key</tt></span> is a key between the smallest
- and next key, this method will return 1; if <span class=
- "c1"><tt>r_key</tt></span> is a key larger than the
- largest key, this method will return the size of r_c.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <a href="#size_type55424436"><tt>size_type</tt></a>
- order_of_prefix
- (<a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> b,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Returns the order of a prefix within a sequence. For
- <span class="c1"><tt>e</tt></span>example, if [b,
- <span class="c1"><tt>e</tt></span>] is the smallest
- prefix, this method will return 0; if r_key is a key
- <span class="c1"><tt>b</tt></span>between the smallest and
- next key, this method will return 1; if r_key is a key
- larger than the largest key, this method will return the
- size of r_c.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Types and
- Constants</a></h2>
-
- <h3><a name="link11" id="link11">Value-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_reference495461441" id=
-"const_reference495461441">const_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const reference type.
-</pre>
- </td>
-
- <td>
- <p>Const reference to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_pointer878814947" id=
-"const_pointer878814947">const_pointer</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const pointer type.
-</pre>
- </td>
-
- <td>
- <p>Const pointer to the container's value-type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_metadata_reference1108857465" id=
-"const_metadata_reference1108857465">const_metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::<a href="#const_reference495461441"><tt>const_reference</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const metadata reference.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_reference583863863" id=
-"metadata_reference583863863">metadata_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#metadata_type2849297114"><tt>metadata_type</tt></a>>::other::reference
-</pre>
- </td>
-
- <td>
- <p>Metadata reference.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Protected Methods</a></h2>
-
- <h3><a name="link13" id="link13">Operators</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (<a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a> node_it,
- <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a> end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Updates the rank of a node through a <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- <span class="c1"><tt>node_it</tt></span>; <span class=
- "c1"><tt>end_nd_it</tt></span> is the end node <a href=
- "#iterator10418194"><tt>iterator</tt></a>.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link14" id="link14">Constructors, destructor, and
- related</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b>
- ~trie_order_statistics_node_update
- ()
-</pre>
- </td>
-
- <td>
- <p>Destructor.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link15" id="link15">Private Methods</a></h2>
-
- <h3><a name="link16" id="link16">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>bool</b>
- empty
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns <tt><b>true</b></tt> if the container is
- empty.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the trie's first element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the trie's just-after-last element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &
- get_e_access_traits
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Access to the cmp_fn object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie_prefix_search_node_update Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie_prefix_search_node_update</tt> Interface</h1>
-
- <p>A node updater that allows tries to be searched for the
- range of values that match a certain prefix.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Const_Node_Iterator1933878761" id=
-"Const_Node_Iterator1933878761"><b>class</b> Const_Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Node_Iterator4206909839" id=
-"Node_Iterator4206909839"><b>class</b> Node_Iterator</a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="E_Access_Traits686553840" id=
-"E_Access_Traits686553840"><b>class</b> E_Access_Traits</a>
-</pre>
- </td>
-
- <td>
- <p>Comparison functor.</p>
- </td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator</a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>-</td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's key type.
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-The instantiating container's const key reference type.
-</pre>
- </td>
-
- <td>
- <p>Const key reference.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Policy Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_access_traits1948190928" id=
-"e_access_traits1948190928">e_access_traits</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#E_Access_Traits686553840"><tt>E_Access_Traits</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Element access traits.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_e_iterator2450008044" id=
-"const_e_iterator2450008044">const_e_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a>::const_iterator
-</pre>
- </td>
-
- <td>
- <p>Const element iterator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="allocator48440069" id="allocator48440069">allocator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Allocator35940069"><tt>Allocator</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Allocator35940069"><tt>Allocator</tt></a>
- type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#allocator48440069"><tt>allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link6" id="link6">Metadata-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="metadata_type2849297114" id=
-"metadata_type2849297114">metadata_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-__gnu_pbds::detail::null_node_metadata
-</pre>
- </td>
-
- <td>
- <p>Metadata type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link7" id="link7">Iterator Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_node_iterator4205924553" id=
-"const_node_iterator4205924553">const_node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href=
-"#Const_Node_Iterator1933878761"><tt>Const_Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Const node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="node_iterator3431975247" id=
-"node_iterator3431975247">node_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Node_Iterator4206909839"><tt>Node_Iterator</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Node iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Const iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="iterator10418194" id="iterator10418194">iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>::value_type
-</pre>
- </td>
-
- <td>
- <p>Iterator type.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link8" id="link8">Public Methods</a></h2>
-
- <h3><a name="link9" id="link9">Find Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair<
- <a href="#const_iterator98626788"><tt>const_iterator</tt></a>,
- <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>>
- prefix_range
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds the <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match
- <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair<
- <a href="#iterator10418194"><tt>iterator</tt></a>,
- <a href="#iterator10418194"><tt>iterator</tt></a>>
- prefix_range
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Finds the <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match
- <span class="c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair<
- <a href="#const_iterator98626788"><tt>const_iterator</tt></a>,
- <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>>
- prefix_range
- (<a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> b,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> e) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Finds the <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match [b,
- <span class="c1"><tt>e</tt></span>).</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-std::pair<
- <a href="#iterator10418194"><tt>iterator</tt></a>,
- <a href="#iterator10418194"><tt>iterator</tt></a>>
- prefix_range
- (<a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> b,
- <a href=
-"#const_e_iterator2450008044"><tt>const_e_iterator</tt></a> e)
-</pre>
- </td>
-
- <td>
- <p>Finds the <a href=
- "#iterator10418194"><tt>iterator</tt></a> range
- corresponding to all values whose prefixes match [b,
- <span class="c1"><tt>e</tt></span>).</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link10" id="link10">Protected Methods</a></h2>
-
- <h3><a name="link11" id="link11">Operators</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>void</b>
- <b>operator</b>()
- (<a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a> node_it,
- <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a> end_nd_it) <b>const</b>
-</pre>
- </td>
-
- <td>
- <p>Called to update a node's metadata.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link12" id="link12">Private Methods</a></h2>
-
- <h3><a name="link13" id="link13">Overrides</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <tt><b>const</b></tt> <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the just-after last element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href="#iterator10418194"><tt>iterator</tt></a>
- end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#iterator10418194"><tt>iterator</tt></a> associated with
- the just-after last element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_begin
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_begin
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with the trie's root node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- node_end
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#const_node_iterator4205924553"><tt>const_node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <a href=
-"#node_iterator3431975247"><tt>node_iterator</tt></a>
- node_end
- () = 0
-</pre>
- </td>
-
- <td>
- <p>Returns the <a href=
- "#node_iterator3431975247"><tt>node_iterator</tt></a>
- associated with a just-after leaf node.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>virtual</b> <b>const</b> <a href=
-"#e_access_traits1948190928"><tt>e_access_traits</tt></a> &
- get_e_access_traits
- () <b>const</b> = 0
-</pre>
- </td>
-
- <td>
- <p>Access to the cmp_fn object.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>string_trie_e_access_traits Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>string_trie_e_access_traits</tt> Interface</h1>
-
- <p>Element access traits for string types.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/trie_policy.hpp"><tt>trie_policy.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Template Parameters</a></h2>
-
- <table class="c1" width="100%" border="1" summary=
- "Template Parameters">
- <tr>
- <td width="20%" align="left"><b>Parameter</b></td>
-
- <td width="50%" align="left"><b>Description</b></td>
-
- <td width="30%" align="left"><b>Default Value</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="String349403" id="String349403"><b>class</b> String </a>
-</pre>
- </td>
-
- <td>
- <p>String type.</p>
- </td>
-
- <td><tt>std::string</tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Min_E_Val40354618" id=
-"Min_E_Val40354618"><b>typename</b> </a><a href=
-"#String349403"><tt>String</tt></a>::value_type Min_E_Val
-</pre>
- </td>
-
- <td>
- <p>Minimal element.</p>
- </td>
-
- <td><tt>SCHAR_MIN</tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Max_E_Val39885868" id=
-"Max_E_Val39885868"><b>typename</b> </a><a href=
-"#String349403"><tt>String</tt></a>::value_type Max_E_Val
-</pre>
- </td>
-
- <td>
- <p>Maximal element.</p>
- </td>
-
- <td><tt>SCHAR_MAX</tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Reverse1686776" id=
-"Reverse1686776"><b>bool</b> Reverse </a>
-</pre>
- </td>
-
- <td>
- <p>Indicates whether reverse iteration should be
- used.</p>
- </td>
-
- <td><tt><b>false</b></tt></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="Allocator35940069" id=
-"Allocator35940069"><b>class</b> Allocator </a>
-</pre>
- </td>
-
- <td>
- <p>Allocator type.</p>
- </td>
-
- <td>
- <pre>
-std::allocator<<b>char</b>>
-</pre>
- </td>
- </tr>
- </table>
-
- <h2><a name="link2" id="link2">Public Types and
- Constants</a></h2>
-
- <h3><a name="link3" id="link3">General Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="size_type55424436" id="size_type55424436">size_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::size_type
-</pre>
- </td>
-
- <td>
- <p>Size type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link4" id="link4">Key-Type Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="key_type10393186" id="key_type10393186">key_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#String349403"><tt>String</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Key type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_key_reference3185471705" id=
-"const_key_reference3185471705">const_key_reference</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> <a href=
-"#Allocator35940069"><tt>Allocator</tt></a>::<b>template</b> rebind<
- <a href=
-"#key_type10393186"><tt>key_type</tt></a>>::other::const_reference
-</pre>
- </td>
-
- <td>
- <p>Const key reference type.</p>
- </td>
- </tr>
- </table>
-
- <h3><a name="link5" id="link5">Element-Type
- Definitions</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Types">
- <tr>
- <td width="30%" align="left"><b>Type</b></td>
-
- <td width="55%" align="left"><b>Definition</b></td>
-
- <td width="15%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="reverse2186776" id="reverse2186776">reverse</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Reverse1686776"><tt>Reverse</tt></a>
-</pre>
- </td>
-
- <td>
- <p><a href="#Reverse1686776"><tt>Reverse</tt></a>
- iteration indicator.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="const_iterator98626788" id=
-"const_iterator98626788">const_iterator</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> __gnu_pbds::detail::__conditional_type<
- <a href="#Reverse1686776"><tt>Reverse</tt></a>,
- <b>typename</b> <a href=
-"#String349403"><tt>String</tt></a>::const_reverse_iterator,
- <b>typename</b> <a href=
-"#String349403"><tt>String</tt></a>::const_iterator>::__type
-</pre>
- </td>
-
- <td>
- <p>Element <tt><b>const</b></tt> iterator type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="e_type393186" id="e_type393186">e_type</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<b>typename</b> std::iterator_traits<<a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>>::value_type
-</pre>
- </td>
-
- <td>
- <p>Element type.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="min_e_val52875418" id="min_e_val52875418">min_e_val</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Min_E_Val40354618"><tt>Min_E_Val</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Minimal element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="max_e_val52406668" id="max_e_val52406668">max_e_val</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#Max_E_Val39885868"><tt>Max_E_Val</tt></a>
-</pre>
- </td>
-
- <td>
- <p>Maximal element.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a name="max_size10483336" id="max_size10483336">max_size</a>
-</pre>
- </td>
-
- <td>
- <pre>
-<a href="#max_e_val52406668"><tt>max_e_val</tt></a> - <a href=
-"#min_e_val52875418"><tt>min_e_val</tt></a> + 1
-</pre>
- </td>
-
- <td>
- <p>Number of distinct elements.</p>
- </td>
- </tr>
- </table>
-
- <h2><a name="link6" id="link6">Public Methods</a></h2>
-
- <h3><a name="link7" id="link7">Access Methods</a></h3>
-
- <table class="c1" width="100%" border="1" summary="Methods">
- <tr>
- <td width="45%" align="left"><b>Method</b></td>
-
- <td width="55%" align="left"><b>Description</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- begin
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the first element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#const_iterator98626788"><tt>const_iterator</tt></a>
- end
- (<a href=
-"#const_key_reference3185471705"><tt>const_key_reference</tt></a> r_key)
-</pre>
- </td>
-
- <td>
- <p>Returns a <a href=
- "#const_iterator98626788"><tt>const_iterator</tt></a> to
- the after-last element of <span class=
- "c1"><tt>r_key</tt></span>.</p>
- </td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<b>inline</b> <b>static</b> <a href=
-"#size_type55424436"><tt>size_type</tt></a>
- e_pos
- (<a href="#e_type393186"><tt>e_type</tt></a> e)
-</pre>
- </td>
-
- <td>
- <p>Maps an <span class="c1"><tt>e</tt></span>element to a
- position.</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trie_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trie_tag</tt> Interface</h1>
-
- <p>Basic trie data structure tag.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
-
- <h2><a name="link1" id="link1">Base Classes</a></h2>
-
- <table class="c1" width="100%" border="1" summary="Bases">
- <tr>
- <td width="80%" align="left"><b>Class</b></td>
-
- <td width="20%" align="left"><b>Derivation Type</b></td>
- </tr>
-
- <tr>
- <td>
- <pre>
-<a href="basic_tree_tag.html"><span class=
-"c2"><tt>basic_tree_tag</tt></span></a>
-</pre>
- </td>
-
- <td>
- <p>public</p>
- </td>
- </tr>
- </table>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>trivial_iterator_tag Interface</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1><tt>trivial_iterator_tag</tt> Interface</h1>
-
- <p>A \quot;trivial\quot; iterator tag. Signifies that the
- iterators has none of the STL's movement abilities.</p>
-
- <p>Defined in: <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/include/ext/pb_ds/tag_and_trait.hpp"><tt>tag_and_trait.hpp</tt></a></p>
- </div>
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 12 April 2005), see www.w3.org" />
-
- <title>Tutorial</title>
- <meta http-equiv="Content-Type" content=
- "text/html; charset=us-ascii" />
- </head>
-
-<body>
- <div id="page">
- <h1>Short Tutorial</h1>
-
- <p>Following is a short tutorial illustrating the main points
- of <tt>pb_ds</tt>. <a href="concepts.html">Concepts</a>
- describes and summarizes some concepts.</p>
-
- <h2><a name="assoc_main" id="assoc_main">Associative
- Containers</a></h2>
-
- <h3><a name="assoc_basic" id="assoc_basic">Basic Use</a></h3>
-
- <p>For the most part, <tt>pb_ds</tt>'s containers have the same
- interface as the STL's, except for the names used for the
- container classes themselves. For example, this shows basic
- operations on a collision-chaining hash-based container:</p>
-
- <pre>
-<a href=
-"cc_hash_table.html">cc_hash_table</a><<b>int</b>, <b>char</b>> c;
-
-c[2] = 'b';
-
-assert(c.find(1) == c.end());
-</pre>
-
- <p>The container is called <a href=
- "cc_hash_table.html"><tt>cc_hash_table</tt></a> as
- opposed to <tt>unordered_map</tt>, since "unordered map" does
- not necessarily mean a hash-based map (as the STL implicitly
- implies). For example, list-based associative containers, which
- are very useful for the construction of "multimaps" (see
- <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>), are also unordered. It is also not called
- <tt>hash_map</tt> since there are more ways than one to
- implement hash tables.</p>
-
- <p>This snippet shows a red-black tree based container:</p>
- <pre>
-<a href=
-"tree.html">tree</a><<b>int</b>, <b>char</b>> c;
-
-c[2] = 'b';
-
-assert(c.find(2) != c.end());
-</pre>
-
- <p>The container is called <a href=
- "tree.html"><tt>tree</tt></a>
- as opposed to <tt>map</tt>, since "map" doesn't say that
- much.</p>
-
- <p>Most of the STL's familiar methods are unchanged.
- <i>E.g.</i>, <tt>being</tt>, <tt>end</tt>, <tt>size</tt>,
- <tt>empty</tt>, and <tt>clear</tt>, do just the same as is
- customary. <a href=
- "assoc_examples.html#basic_usage">Associative-Container
- Examples::Basic use</a>, and especially <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_map.cc"><tt>basic_map.cc</tt></a>,
- show examples of this.</p>
-
-<p>This isn't to say that things are exactly as one would expect,
-given the container requirments and interfaces in the C++
-standard.</p>
-
-
- <p>The names of containers' policies and policy accessors are
- different than those of the STL. For example, if <tt>C</tt> is
- some type of hash-based container, then</p>
- <pre>
-C::hash_fn
-</pre>gives the type of its hash functor, and if <tt>c</tt> is some
-hash-based container object, then
- <pre>
-c.get_hash_fn()
-</pre>
-
- <p>will return a reference to its hash-functor object.</p>
-
- <p>Similarly, if <tt>C</tt> is some type of tree-based
- container, then</p>
- <pre>
-C::cmp_fn
-</pre>gives the type of its comparison functor, and if <tt>c</tt>
-is some tree-based container object, then
- <pre>
-c.get_cmp_fn()
-</pre>
-
- <p>will return a reference to its comparison-functor
- object.</p>
-
- <p>It would be nice to give names consistent with those in the
- existing C++ standard (inclusive of TR1). Unfortunately, these
- standard containers don't consistently name types and
- methods. For example, <tt>std::tr1::unordered_map</tt> uses
- <tt>hasher</tt> for the hash functor, but <tt>std::map</tt> uses
- <tt>key_compare</tt> for the comparison functor. Also, we could
- not find an accessor for <tt>std::tr1::unordered_map</tt>'s hash
- functor, but <tt>std::map</tt> uses <tt>compare</tt> for accessing
- the comparison functor.</p>
-
-<p>Instead, <tt>pb_ds</tt> attempts to be internally consistent, and
-uses standard-derived terminology if possible.
-</p>
-
- <p>Another source of difference is in scope: <tt>pb_ds</tt>
- contains more types of associative containers than the STL, and
- more opportunities to configure these new containers, since
- different types of associative containers are useful in different
- settings (see <a href=
- "assoc_performance_tests.html#dss_family_choice">Associative-Container
- Performance Tests::Observations::Underlying Data-Structure
- Families</a>).</p>
-
- <p><tt>pb_ds</tt> contains different classes for hash-based containers,
- tree-based containers, trie-based containers, and list-based
- containers. <a href=
- "interface.html#containers_assoc">Inteface::Containers::Associative
- Containers</a> lists the containers. <a href=
- "hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>, <a href=
- "tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>, <a href=
- "trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>, and <a href=
- "lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>, explain some more about
- these types of containers, respectively.</p>
-
- <p>Since associative containers share parts of their interface,
- they are organized as a class hierarchy; it is shown in Figure
- <a href="#cd">Class hierarchy</a>.</p>
-
- <h6 class="c1"><a name="cd" id="cd"><img src="container_cd.png" alt=
- "no image" /></a></h6>
-
- <h6 class="c1">Class hierarchy.</h6>
-
- <p>Each type or method is defined in the most-common ancestor
- in which it makes sense:
- <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_map.cc"><tt>basic_map.cc</tt></a>
- shows an example of most of the associative-container
- types.</p>
-
-
- <p>For example, all associative containers support iteration.
- Consequently, <a href=
- "container_base.html"><tt>container_base</tt></a> has the
- interface:</p>
- <pre>
-<b>template</b><...>
-<b>class</b> <a href="container_base.html">container_base</a>
-{
- ...
-
-<b>public</b>:
- ...
-
- const_iterator
- begin() <b>const</b>;
-
- iterator
- begin();
-
- const_iterator
- end() <b>const</b>;
-
- iterator
- end();
-
- ...
-};
-</pre>
-
- <p>and so all associative containers inherent this method.
- Conversely, both collision-chaining and (general) probing
- hash-based associative containers have a hash functor, so
- <a href=
- "basic_hash_table.html"><tt>basic_hash_table</tt></a>
- has the interface:</p>
- <pre>
-<b>template</b><...>
-<b>class</b> <a href="basic_hash_table.html">basic_hash_table</a> : <b>public</b> <a href="container_base.html">container_base</a>
-{
- ...
-
-<b>public</b>:
- ...
-
- const hash_fn&
- get_hash_fn() const;
-
- hash_fn&
- get_hash_fn();
- ...
-};
-</pre>
-
- <p>and so all hash-based associative containers inherit the
- same hash-functor accessor methods.</p>
-
- <p>This is discussed further in <a href=
- "ds_gen.html">Design::Associative Containers::Data-Structure
- Genericity</a>.</p>
-
- <h3><a name="assoc_policies" id="assoc_policies">Configuring
- Associative Containers</a></h3>
-
- <p>In general, each of <tt>pb_ds</tt>'s containers is
- parametrized by more policies than those of the STL's. For
- example, the STL's hash-based container is parametrized as
- follows:</p>
- <pre>
-<b>template</b><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash,
- <b>typename</b> Pred,
- <b>typename</b> Allocator,
- <b>bool</b> Cache_Hashe_Code>
-<b>class</b> unordered_map;
-</pre>
-
- <p>and so can be configured by key type, mapped type, a functor
- that translates keys to unsigned integral types, an equivalence
- predicate, an allocator, and an indicator whether to store hash
- values with each entry. <tt>pb_ds</tt>'s collision-chaining
- hash-based container is parametrized as</p>
- <pre>
-<b>template</b><
- <b>typename</b> Key,
- <b>typename</b> Mapped,
- <b>typename</b> Hash_Fn,
- <b>typename</b> Eq_Fn,
- <b>typename</b> Comb_Hash_Fn,
- <b>typename</b> Resize_Policy
- <b>bool</b> Store_Hash
- <b>typename</b> Allocator>
-<b>class</b> <a href=
-"cc_hash_table.html">cc_hash_table</a>;
-</pre>
-
- <p>and so can be configured by the first four types of
- <tt>std::tr1::unordered_map</tt>, then a policy for translating
- the key-hash result into a position within the table, then a
- policy by which the table resizes, an indicator whether to
- store hash values with each entry, and an allocator (which is
- typically the last template parameter in STL containers).</p>
-
- <p>Nearly all policy parameters have default values, so this
- need not be considered for casual use. It is important to note,
- however, that hash-based containers' policies can dramatically
- alter their performance in different settings, and that
- tree-based containers' policies can make them useful for other
- purposes than just look-up.</p>
-
- <p><a href="hash_based_containers.html">Design::Associative
- Containers::Hash-Based Containers</a>, <a href=
- "tree_based_containers.html">Design::Associative
- Containers::Tree-Based Containers</a>, <a href=
- "trie_based_containers.html">Design::Associative
- Containers::Trie-Based Containers</a>, and <a href=
- "lu_based_containers.html">Design::Associative
- Containers::List-Based Containers</a>, explain some more about
- configuring hash based, tree based, trie based, and list base
- containers, respectively. <a href=
- "interface.html#ds_policy_classes">Interface::Container Policy
- Classes</a> shows the different policy classes for configuring
- associative containers. <a href=
- "assoc_examples.html#hash_based">Examples::Hash-Based
- Containers</a>, <a href=
- "assoc_examples.html#tree_like_based">Examples::Tree-Like-Based
- Containers</a>, and <a href=
- "assoc_examples.html#trie_based">Examples::Trie-Based
- Containers</a> show examples for this.</p>
-
- <h3><a name="assoc_ds_gen" id="assoc_ds_gen">Determining
- Containers' Attributes</a></h3>
-
- <p>Associative-containers' underlying data structures obviously
- affect their performance; Unfortunately, they can also affect
- their interface. When manipulating generically associative
- containers, it is often useful to be able to statically
- determine what they can support and what the cannot. (This was
- discussed in <a href=
- "motivation.html#assoc_ds_genericity">Motivation::Associative
- Containers::Data-Structure Genericity</a>.)</p>
-
- <p>Happily, the STL provides a good solution to a similar
- problem - that of the different behavior of iterators. If
- <tt>It</tt> is an iterator, then</p>
- <pre>
-<b>typename</b> std::iterator_traits<It>::iterator_category
-</pre>
-
- <p>is one of a small number of pre-defined
- <tt><b>struct</b></tt>s, and,</p>
- <pre>
-<b>typename</b> std::iterator_traits<It>::value_type
-</pre>
-
- <p>is the value type to which the iterator "points".</p>
-
- <p>Similarly, in <tt>pb_ds</tt>, if <tt>C</tt> is an
- associative container, then</p>
- <pre>
-<b>typename</b> <a href=
-"assoc_container_traits.html"><tt>container_traits</tt></a><C>::container_category
-</pre>is one of a small number of pre-defined
-<tt><b>struct</b></tt>s, each one corresponding to a class in
-Figure <a href="#cd">Class hierarchy</a>. These tags are listed in
-<a href="interface.html#ds_ts_assoc">Interface::Associative
-Containers::Data-Structure Tags and Traits::Data-Structure
-Tags::Associative-Containers</a>; <a href="ds_gen.html#container_traits">
- Design::Associative Containers::Data-Structure Tags and
- Traits</a> explains this further; <a href=
- "ds_gen.html#tag_cd">Design::Associative
- Containers::Data-Structure Tags and Traits::Data-structure tag
- class hierarchy</a> shows a class diagram.
-
- <p>In most cases, however, the exact underlying data structure
- is not really important, but only one of its attributes:
- whether it guarantees storing elements by key order, for
- example. For this one can use</p>
- <pre>
-<b>typename</b> <a href=
-"assoc_container_traits.html"><tt>container_traits</tt></a><C>::order_preserving
-</pre>
-
- <p>This is described further in <a href=
- "ds_gen.html">Design::Data-Structure Genericity</a>; <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/assoc_container_traits.cc"><tt>assoc_container_traits.cc</tt></a>
- shows an example of querying containers' attributes.</p>
-
- <h3><a name="assoc_find_range" id="assoc_find_range">Point-Type
- and Range-Type Methods and Iterators</a></h3>(This subsection
- addresses points from <a href=
- "motivation.html#assoc_diff_it">Motivation::Associative
- Containers::Differentiating between Iterator Types</a>.)
-
- <p><tt>pb_ds</tt> differentiates between two types of methods
- and iterators: point-type, and range-type. For example,
- <tt>find</tt> and <tt>insert</tt> are point-type methods, since
- they each deal with a specific element; their returned
- iterators are point-type iterators. <tt>begin</tt> and
- <tt>end</tt> are range-type methods, since they are not used to
- find a specific element, but rather to go over all elements in
- a container object; their returned iterators are range-type
- iterators.</p>
-
- <p>Most containers store elements in an order that is
- determined by their interface. Correspondingly, it is fine that
- their point-type iterators are synonymous with their range-type
- iterators. For example, in the following snippet</p>
- <pre>
-std::for_each(c.find(1), c.find(5), foo);
-</pre>two point-type iterators (returned by <tt>find</tt>) are used
-for a range-type purpose - going over all elements whose key is
-between 1 and 5.
-
- <p>Conversely, the above snippet makes no sense for
- self-organizing containers - ones that order (and reorder)
- their elements by implementation. It would be nice to have a
- uniform iterator system that would allow the above snippet to
- compile only if it made sense.</p>
-
- <p>This could trivially be done by specializing
- <tt>std::for_each</tt> for the case of iterators returned by
- <tt>std::tr1::unordered_map</tt>, but this would only solve the
- problem for one algorithm and one container. Fundamentally, the
- problem is that one can loop using a self-organizing
- container's point-type iterators.</p>
-
- <p><tt>pb_ds</tt>'s containers define two families of
- iterators: <tt>const_point_iterator</tt> and
- <tt>point_iterator</tt> are the iterator types returned by
- point-type methods; <tt>const_iterator</tt> and
- <tt>iterator</tt> are the iterator types returned by range-type
- methods.</p>
- <pre>
-<b>class</b> <i><- some container -></i>
-{
-<b>public</b>:
- ...
-
- <b>typedef</b> <i><- something -></i> const_iterator;
-
- <b>typedef</b> <i><- something -></i> iterator;
-
- <b>typedef</b> <i><- something -></i> const_point_iterator;
-
- <b>typedef</b> <i><- something -></i> point_iterator;
-
- ...
-
-<b>public</b>:
- ...
-
- const_iterator begin () <b>const</b>;
-
- iterator begin();
-
- const_point_iterator find(...) <b>const</b>;
-
- point_iterator find(...);
-};
-</pre>
-
- <p><a href="ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods and Iterators</a> discusses the relationship
- between point-type and range-type iterators in general; for
- containers whose interface defines sequence order, however, it
- is very simple: point-type and range-type iterators are exactly
- the same, which means that the above snippet will compile if it
- is used for an order-preserving associative container.</p>
-
- <p>For self-organizing containers, however, (hash-based
- containers as a special example), the preceding snippet will
- not compile, because their point-type iterators do not support
- <tt><b>operator</b>++</tt>.</p>
-
- <p>In any case, both for order-preserving and self-organizing
- containers, the following snippet will compile:</p>
- <pre>
-<b>typename</b> Cntnr::point_iterator it = c.find(2);
-</pre>
-
- <p>because a range-type iterator can always be converted to a
- point-type iterator.</p>
-
- <p><a href="ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods and Iterators</a> discusses this
- further.</p>
-
- <p><a href=
- "motivation.html#assoc_diff_it">Motivation::Associative
- Containers::Differentiating between Iterator Types</a> also
- raised the point that a container's iterators might have
- different invalidation rules concerning their de-referencing
- abilities and movement abilities. This now corresponds exactly
- to the question of whether point-type and range-type iterators
- are valid. As explained in <a href="#assoc_ds_gen">Determining
- Containers' Attributes</a>, <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a> allows
- querying a container for its data structure attributes. The
- iterator-invalidation guarantees are certainly a property of
- the underlying data structure, and so</p>
- <pre>
-<a href=
-"assoc_container_traits.html">container_traits</a><C>::invalidation_guarantee
-</pre>
-
- <p>gives one of three pre-determined types that answer this
- query. This is explained further in <a href=
- "ds_gen.html#find_range">Design::Associative
- Containers::Data-Structure Genericity::Point-Type and
- Range-Type Methods and Iterators</a>.</p>
-
- <h3><a name="assoc_ms" id="assoc_ms">Distinguishing between Maps and Sets</a></h3>
-
- <p>Anyone familiar with the STL knows that there are four kinds
- of associative containers: maps, sets, multimaps, and
- multisets. <a href="#assoc_basic">Basic Use</a> discussed how
- to use maps, <i>i.e.</i> containers that associate each key to
- some data.</p>
-
- <p>Sets are associative containers that simply store keys -
- they do not map them to anything. In the STL, each map class
- has a corresponding set class. <i>E.g.</i>,
- <tt>std::map<<b>int</b>, <b>char</b>></tt> maps each
- <tt><b>int</b></tt> to a <tt><b>char</b></tt>, but
- <tt>std::set<<b>int</b>, <b>char</b>></tt> simply stores
- <tt><b>int</b></tt>s. In <tt>pb_ds</tt>, however, there are no
- distinct classes for maps and sets. Instead, an associative
- container's <tt>Mapped</tt> template parameter is a policy: if
- it is instantiated by <a href=
- "null_mapped_type.html"><tt>null_mapped_type</tt></a>, then it
- is a "set"; otherwise, it is a "map". <i>E.g.</i>,</p>
- <pre>
-<a href="cc_hash_table.html">cc_hash_table</a><<b>int</b>, <b>char</b>>
-</pre>is a "map" mapping each <tt><b>int</b></tt> value to a <tt>
- <b>char</b></tt>, but
- <pre>
-<a href="cc_hash_table.html">cc_hash_table</a><<b>int</b>, <a href="null_mapped_type.html">null_mapped_type</a>>
-</pre>is a type that uniquely stores <tt><b>int</b></tt> values.
-
- <p>Once the <tt>Mapped</tt> template parameter is instantiated
- by <a href="null_mapped_type.html">null_mapped_type</a>, then
- the "set" acts very similarly to the STL's sets - it does not
- map each key to a distinct <a href=
- "null_mapped_type.html">null_mapped_type</a> object. Also,
- , the container's <tt>value_type</tt> is essentially
- its <tt>key_type</tt> - just as with the STL's sets. For a simple example, see <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_set.cc"><tt>basic_set.cc</tt></a>
- .</p>
-
- <p>The STL's multimaps and multisets allow, respectively,
- non-uniquely mapping keys and non-uniquely storing keys. As
- discussed in <a href=
- "motivation.html#assoc_mapping_semantics">Motivation::Associative
- Containers::Alternative to Multiple Equivalent Keys</a>, the
- reasons why this might be necessary are 1) that a key might be
- decomposed into a primary key and a secondary key, 2) that a
- key might appear more than once, or 3) any arbitrary
- combination of 1)s and 2)s. Correspondingly,
- one should use 1) "maps" mapping primary keys to secondary
- keys, 2) "maps" mapping keys to size types, or 3) any arbitrary
- combination of 1)s and 2)s. Thus, for example, an
- <tt>std::multiset<<b>int</b>></tt> might be used to store
- multiple instances of integers, but using <tt>pb_ds</tt>'s
- containers, one might use</p>
- <pre>
-<a href=
-"tree.html">tree</a><<b>int</b>, size_t>
-</pre><i>i.e.</i>, a "map" of <tt><b>int</b></tt>s to
-<tt>size_t</tt>s.
-
- <p><a href="assoc_examples.html#mmaps">Associative-Container
- Examples::"Multimaps" and "Multisets"</a> shows some simple
- examples.</p>
-
- <p>These "multimaps" and "multisets" might be confusing to
- anyone familiar with the STL's <tt>std::multimap</tt> and
- <tt>std::multiset</tt>, because there is no clear
- correspondence between the two. For example, in some cases
- where one uses <tt>std::multiset</tt> in the STL, one might use
- in <tt>pb_ds</tt> a "multimap" of "multisets" - <i>i.e.</i>, a
- container that maps primary keys each to an associative
- container that maps each secondary key to the number of times
- it occurs.</p>
-
- <p>When one uses a "multimap," one should choose with care the
- type of container used for secondary keys. This is further
- explained in <a href=
- "assoc_performance_tests.html#msc">Associative-Container
- Performance Tests::Observations::Mapping-Semantics
- Considerations</a>.</p>
-
-<hr>
- <h2><a name="pq" id="pq">Priority Queues</a></h2>
-
- <h3><a name="pq_basic" id="pq_basic">Basic Use</a></h3>
-
- <p><tt>pb_ds</tt>'s priority_queue container is
- similar to the STL's in interface. For example:</p>
- <pre>
-<a href=
-"priority_queue.html">priority_queue</a><<b>int</b>> p;
-
-p.push(2);
-p.push(4);
-p.push(1);
-
-assert(p.top() == 4);
-
-p.pop();
-
-assert(p.top() == 2);
-
-assert(p.size() == 2);
-assert(!p.empty());
-</pre>
-
- <h3><a name="pq_policies" id="pq_policies">Configuring Priority
- Queues</a></h3>
-
- <p>As opposed to associative containers, priority queues have
- relatively few configuration options. The priority queue is
- parametrized as follows:</p>
- <pre>
-<b>template</b><
- <b>typename</b> Value_Type,
- <b>typename</b> Cmp_Fn,
- <b>typename</b> Tag,
- <b>typename</b> Allocator>
-<b>class</b> <a href="priority_queue.html">priority_queue</a>;
-</pre>
-
- <p>The <tt>Value_Type</tt>, <tt>Cmp_Fn</tt>, and
- <tt>Allocator</tt> parameters are the container's value type,
- comparison-functor type, and allocator type, respectively;
- these are very similar to the STL's priority queue. The
- <tt>Tag</tt> parameter is different: there are a number of
- pre-defined tag types corresponding to binary heaps, binomial
- heaps, <i>etc.</i>, and <tt>Tag</tt> should be instantiated
- by one of them. <a href=
- "interface.html#ds_ts_pq">Interface::Data-Structure Tags and
- Traits::Data Structure Tags::Priority-Queues</a> lists the
- possible types, <a href="pq_design.html">Priority-Queue
- Design</a> explains this further, and <a href=
- "http://gcc.gnu.org/viewcvs/*checkout*/trunk/libstdc%2B%2B-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc"><tt>basic_priority_queue.cc</tt></a>
- shows an example.</p>
-
- <p>Note that as opposed to the STL's priority queue, <a href=
- "priority_queue.html"><tt>priority_queue</tt></a> is not a
- sequence-adapter; it is a regular container.</p>
-
- <h3><a name="pq_ds_more_ops" id="pq_ds_more_ops">Supporting
- More Operations</a></h3>
-
- <p><a href="priority_queue.html"><tt>priority_queue</tt></a>'s
- <tt>push</tt> method returns a point-type iterator, which can
- be used for modifying or erasing arbitrary values. For
- example:</p>
- <pre>
-<a href=
-"priority_queue.html">priority_queue</a><<b>int</b>> p;
-
-<a href=
-"priority_queue.html">priority_queue</a><<b>int</b>>::point_iterator it = p.push(3);
-
-p.modify(it, 4);
-</pre>
-
- <p>These types of operations are necessary for making priority
- queues useful for different applications, especially graph
- applications. <a href="pq_examples.html#xref">Priority-Queue
- Examples::Cross-Referencing</a> gives some examples.</p>
-
- <h3><a name="pq_ds_gen" id="pq_ds_gen">Determining Container
- Attributes</a></h3>
-
- <p>Similarly to <a href=
- "assoc_container_traits.html"><tt>container_traits</tt></a> (described
- in <a href="#assoc_ds_gen">Associative Containers::Determining
- Containers' Attributes</a>), <a href=
- "pq_container_traits.html"><tt>container_traits</tt></a> can be used to
- statically determine priority-queues' attributes:</p>
- <pre>
-<a href=
-"pq_container_traits.html">container_traits</a><C>::container_category
-</pre>is one of a small number of predefined tag structures that
-identifies the underlying data structure, and
- <pre>
-<a href=
-"pq_container_traits.html">container_traits</a><C>::invalidation_guarantee
-</pre>
-
- <p>is its invalidation guarantee. Invalidation guarantees are
- especially important regarding priority queues, since in
- <tt>pb_ds</tt>'s design, iterators are practically the only way
- to manipulate them.</p>
-
- <p><a href="pq_design.html#pq_traits">Design::Priority
- Queues::Traits</a> discusses this further. <a href=
- "pq_examples.html#generics">Priority-Queue
- Examples::Generics</a> shows an example.</p>
- </div>
-</body>
-</html>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -318.3455791044776 L 332.15 -328.3455791044776 L 344.65 -328.3455791044776 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -342.1489552238806 L 370.55 -352.1489552238806 L 383.05 -352.1489552238806 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -363.5792537313433 L 408.95 -373.5792537313433 L 421.45 -373.5792537313433 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -382.68641791044774 L 447.35 -392.68641791044774 L 459.85 -392.68641791044774 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -407.67185074626866 L 485.75 -417.67185074626866 L 498.25 -417.67185074626866 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -430.44776119402985 L 524.15 -440.44776119402985 L 536.65 -440.44776119402985 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -453.8429552238806 L 562.55 -463.8429552238806 L 575.05 -463.8429552238806 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -475.14092537313434 L 600.95 -485.14092537313434 L 613.45 -485.14092537313434 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -495.07489552238803 L 639.35 -505.07489552238803 L 651.85 -505.07489552238803 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -300.8645343283582 M 342.4 -300.8645343283582 L 342.4 -300.865 M 342.4 -300.865 A 4 4 0 1 0 334.4 -300.865 A 4 4 0 1 0 342.4 -300.865 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -300.8930423880597 M 380.8 -300.8930423880597 L 380.8 -300.893 M 380.8 -300.893 A 4 4 0 1 0 372.8 -300.893 A 4 4 0 1 0 380.8 -300.893 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -300.9157549253731 M 419.2 -300.9157549253731 L 419.2 -300.916 M 419.2 -300.916 A 4 4 0 1 0 411.2 -300.916 A 4 4 0 1 0 419.2 -300.916 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -300.9447653731343 M 457.6 -300.9447653731343 L 457.6 -300.945 M 457.6 -300.945 A 4 4 0 1 0 449.6 -300.945 A 4 4 0 1 0 457.6 -300.945 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -300.95871074626865 M 496.0 -300.95871074626865 L 496 -300.959 M 496 -300.959 A 4 4 0 1 0 488 -300.959 A 4 4 0 1 0 496 -300.959 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -300.96553731343283 M 534.4 -300.96553731343283 L 534.4 -300.966 M 534.4 -300.966 A 4 4 0 1 0 526.4 -300.966 A 4 4 0 1 0 534.4 -300.966 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -300.97034447761195 M 572.8 -300.97034447761195 L 572.8 -300.97 M 572.8 -300.97 A 4 4 0 1 0 564.8 -300.97 A 4 4 0 1 0 572.8 -300.97 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -300.9836134328358 M 611.2 -300.9836134328358 L 611.2 -300.984 M 611.2 -300.984 A 4 4 0 1 0 603.2 -300.984 A 4 4 0 1 0 611.2 -300.984 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -300.97012447761193 M 649.6 -300.97012447761193 L 649.6 -300.97 M 649.6 -300.97 A 4 4 0 1 0 641.6 -300.97 A 4 4 0 1 0 649.6 -300.97 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -300.9824904477612 M 688.0 -300.9824904477612 L 688 -300.982 M 688 -300.982 A 4 4 0 1 0 680 -300.982 A 4 4 0 1 0 688 -300.982 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 334.4 -296.6776689552239 L 334.4 -304.6776689552239 L 342.4 -304.6776689552239 L 342.4 -296.6776689552239 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 372.8 -296.63155104477613 L 372.8 -304.63155104477613 L 380.8 -304.63155104477613 L 380.8 -296.63155104477613 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 411.2 -296.62003223880595 L 411.2 -304.62003223880595 L 419.2 -304.62003223880595 L 419.2 -296.62003223880595 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 449.6 -296.60298388059704 L 449.6 -304.60298388059704 L 457.6 -304.60298388059704 L 457.6 -296.60298388059704 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 488.0 -296.5816208955224 L 488.0 -304.5816208955224 L 496.0 -304.5816208955224 L 496.0 -296.5816208955224 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 526.4 -296.58382746268654 L 526.4 -304.58382746268654 L 534.4 -304.58382746268654 L 534.4 -296.58382746268654 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 564.8 -296.57985432835824 L 564.8 -304.57985432835824 L 572.8 -304.57985432835824 L 572.8 -296.57985432835824 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 603.2 -296.57130716417913 L 603.2 -304.57130716417913 L 611.2 -304.57130716417913 L 611.2 -296.57130716417913 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 641.6 -296.5609408955224 L 641.6 -304.5609408955224 L 649.6 -304.5609408955224 L 649.6 -296.5609408955224 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 680.0 -296.55760805970147 L 680.0 -304.55760805970147 L 688.0 -304.55760805970147 L 688.0 -296.55760805970147 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 307.0 -175.66666666666669 L 300.75 -185.66666666666669 L 313.25 -185.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 303.0 -140.66666666666666 L 303.0 -148.66666666666666 L 311.0 -148.66666666666666 L 311.0 -140.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.34e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 2.68e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.50048673219425">
+ 4.02e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 5.36e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 6.70e-06
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -323.3455791044776 L 376.8 -347.1489552238806 L 415.2 -368.5792537313433 L 453.6 -387.68641791044774 L 492.0 -412.67185074626866 L 530.4 -435.44776119402985 L 568.8 -458.8429552238806 L 607.2 -480.14092537313434 L 645.6 -500.07489552238803 L 684.0 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -318.3455791044776 L 332.15 -328.3455791044776 L 344.65 -328.3455791044776 L 344.65 -318.3455791044776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -318.3455791044776 L 332.15 -328.3455791044776 L 344.65 -328.3455791044776 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -342.1489552238806 L 370.55 -352.1489552238806 L 383.05 -352.1489552238806 L 383.05 -342.1489552238806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -342.1489552238806 L 370.55 -352.1489552238806 L 383.05 -352.1489552238806 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -363.5792537313433 L 408.95 -373.5792537313433 L 421.45 -373.5792537313433 L 421.45 -363.5792537313433 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -363.5792537313433 L 408.95 -373.5792537313433 L 421.45 -373.5792537313433 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -382.68641791044774 L 447.35 -392.68641791044774 L 459.85 -392.68641791044774 L 459.85 -382.68641791044774 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -382.68641791044774 L 447.35 -392.68641791044774 L 459.85 -392.68641791044774 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -407.67185074626866 L 485.75 -417.67185074626866 L 498.25 -417.67185074626866 L 498.25 -407.67185074626866 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -407.67185074626866 L 485.75 -417.67185074626866 L 498.25 -417.67185074626866 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -430.44776119402985 L 524.15 -440.44776119402985 L 536.65 -440.44776119402985 L 536.65 -430.44776119402985 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -430.44776119402985 L 524.15 -440.44776119402985 L 536.65 -440.44776119402985 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -453.8429552238806 L 562.55 -463.8429552238806 L 575.05 -463.8429552238806 L 575.05 -453.8429552238806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -453.8429552238806 L 562.55 -463.8429552238806 L 575.05 -463.8429552238806 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -475.14092537313434 L 600.95 -485.14092537313434 L 613.45 -485.14092537313434 L 613.45 -475.14092537313434 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -475.14092537313434 L 600.95 -485.14092537313434 L 613.45 -485.14092537313434 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -495.07489552238803 L 639.35 -505.07489552238803 L 651.85 -505.07489552238803 L 651.85 -495.07489552238803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -495.07489552238803 L 639.35 -505.07489552238803 L 651.85 -505.07489552238803 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -300.8645343283582 L 376.8 -300.8930423880597 L 415.2 -300.9157549253731 L 453.6 -300.9447653731343 L 492.0 -300.95871074626865 L 530.4 -300.96553731343283 L 568.8 -300.97034447761195 L 607.2 -300.9836134328358 L 645.6 -300.97012447761193 L 684.0 -300.9824904477612" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -292.8645343283582 L 330.4 -308.8645343283582 L 346.4 -308.8645343283582 L 346.4 -292.8645343283582 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -300.8645343283582 M 342.4 -300.8645343283582 L 342.4 -300.865 M 342.4 -300.865 A 4 4 0 1 0 334.4 -300.865 A 4 4 0 1 0 342.4 -300.865 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -292.8930423880597 L 368.8 -308.8930423880597 L 384.8 -308.8930423880597 L 384.8 -292.8930423880597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -300.8930423880597 M 380.8 -300.8930423880597 L 380.8 -300.893 M 380.8 -300.893 A 4 4 0 1 0 372.8 -300.893 A 4 4 0 1 0 380.8 -300.893 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -292.9157549253731 L 407.2 -308.9157549253731 L 423.2 -308.9157549253731 L 423.2 -292.9157549253731 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -300.9157549253731 M 419.2 -300.9157549253731 L 419.2 -300.916 M 419.2 -300.916 A 4 4 0 1 0 411.2 -300.916 A 4 4 0 1 0 419.2 -300.916 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -292.9447653731343 L 445.6 -308.9447653731343 L 461.6 -308.9447653731343 L 461.6 -292.9447653731343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -300.9447653731343 M 457.6 -300.9447653731343 L 457.6 -300.945 M 457.6 -300.945 A 4 4 0 1 0 449.6 -300.945 A 4 4 0 1 0 457.6 -300.945 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -292.95871074626865 L 484.0 -308.95871074626865 L 500.0 -308.95871074626865 L 500.0 -292.95871074626865 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -300.95871074626865 M 496.0 -300.95871074626865 L 496 -300.959 M 496 -300.959 A 4 4 0 1 0 488 -300.959 A 4 4 0 1 0 496 -300.959 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -292.96553731343283 L 522.4 -308.96553731343283 L 538.4 -308.96553731343283 L 538.4 -292.96553731343283 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -300.96553731343283 M 534.4 -300.96553731343283 L 534.4 -300.966 M 534.4 -300.966 A 4 4 0 1 0 526.4 -300.966 A 4 4 0 1 0 534.4 -300.966 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -292.97034447761195 L 560.8 -308.97034447761195 L 576.8 -308.97034447761195 L 576.8 -292.97034447761195 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -300.97034447761195 M 572.8 -300.97034447761195 L 572.8 -300.97 M 572.8 -300.97 A 4 4 0 1 0 564.8 -300.97 A 4 4 0 1 0 572.8 -300.97 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -292.9836134328358 L 599.2 -308.9836134328358 L 615.2 -308.9836134328358 L 615.2 -292.9836134328358 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -300.9836134328358 M 611.2 -300.9836134328358 L 611.2 -300.984 M 611.2 -300.984 A 4 4 0 1 0 603.2 -300.984 A 4 4 0 1 0 611.2 -300.984 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -292.97012447761193 L 637.6 -308.97012447761193 L 653.6 -308.97012447761193 L 653.6 -292.97012447761193 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -300.97012447761193 M 649.6 -300.97012447761193 L 649.6 -300.97 M 649.6 -300.97 A 4 4 0 1 0 641.6 -300.97 A 4 4 0 1 0 649.6 -300.97 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -292.98249044776117 L 676.0 -308.98249044776117 L 692.0 -308.98249044776117 L 692.0 -292.98249044776117 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -300.9824904477612 M 688.0 -300.9824904477612 L 688 -300.982 M 688 -300.982 A 4 4 0 1 0 680 -300.982 A 4 4 0 1 0 688 -300.982 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -300.6776689552239 L 376.8 -300.63155104477613 L 415.2 -300.62003223880595 L 453.6 -300.60298388059704 L 492.0 -300.5816208955224 L 530.4 -300.58382746268654 L 568.8 -300.5798543283582 L 607.2 -300.57130716417913 L 645.6 -300.5609408955224 L 684.0 -300.55760805970147" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 334.4 -296.6776689552239 L 334.4 -304.6776689552239 L 342.4 -304.6776689552239 L 342.4 -296.6776689552239 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -296.6776689552239 L 334.4 -304.6776689552239 L 342.4 -304.6776689552239 L 342.4 -296.6776689552239 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 372.8 -296.63155104477613 L 372.8 -304.63155104477613 L 380.8 -304.63155104477613 L 380.8 -296.63155104477613 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -296.63155104477613 L 372.8 -304.63155104477613 L 380.8 -304.63155104477613 L 380.8 -296.63155104477613 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 411.2 -296.62003223880595 L 411.2 -304.62003223880595 L 419.2 -304.62003223880595 L 419.2 -296.62003223880595 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -296.62003223880595 L 411.2 -304.62003223880595 L 419.2 -304.62003223880595 L 419.2 -296.62003223880595 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 449.6 -296.60298388059704 L 449.6 -304.60298388059704 L 457.6 -304.60298388059704 L 457.6 -296.60298388059704 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -296.60298388059704 L 449.6 -304.60298388059704 L 457.6 -304.60298388059704 L 457.6 -296.60298388059704 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 488.0 -296.5816208955224 L 488.0 -304.5816208955224 L 496.0 -304.5816208955224 L 496.0 -296.5816208955224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -296.5816208955224 L 488.0 -304.5816208955224 L 496.0 -304.5816208955224 L 496.0 -296.5816208955224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 526.4 -296.58382746268654 L 526.4 -304.58382746268654 L 534.4 -304.58382746268654 L 534.4 -296.58382746268654 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -296.58382746268654 L 526.4 -304.58382746268654 L 534.4 -304.58382746268654 L 534.4 -296.58382746268654 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 564.8 -296.57985432835824 L 564.8 -304.57985432835824 L 572.8 -304.57985432835824 L 572.8 -296.57985432835824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -296.57985432835824 L 564.8 -304.57985432835824 L 572.8 -304.57985432835824 L 572.8 -296.57985432835824 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 603.2 -296.57130716417913 L 603.2 -304.57130716417913 L 611.2 -304.57130716417913 L 611.2 -296.57130716417913 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -296.57130716417913 L 603.2 -304.57130716417913 L 611.2 -304.57130716417913 L 611.2 -296.57130716417913 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 641.6 -296.5609408955224 L 641.6 -304.5609408955224 L 649.6 -304.5609408955224 L 649.6 -296.5609408955224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -296.5609408955224 L 641.6 -304.5609408955224 L 649.6 -304.5609408955224 L 649.6 -296.5609408955224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 680.0 -296.55760805970147 L 680.0 -304.55760805970147 L 688.0 -304.55760805970147 L 688.0 -296.55760805970147 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -296.55760805970147 L 680.0 -304.55760805970147 L 688.0 -304.55760805970147 L 688.0 -296.55760805970147 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -180.66666666666669 L 314 -180.66666666666669" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 300.75 -175.66666666666669 L 300.75 -185.66666666666669 L 313.25 -185.66666666666669 L 313.25 -175.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -175.66666666666669 L 300.75 -185.66666666666669 L 313.25 -185.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-176.0">
+ binary_heap
+ </text>
+ <path d="M 300 -162.66666666666666 L 314 -162.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 299.0 -154.66666666666666 L 299.0 -170.66666666666666 L 315.0 -170.66666666666666 L 315.0 -154.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 303.0 -140.66666666666666 L 303.0 -148.66666666666666 L 311.0 -148.66666666666666 L 311.0 -140.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -140.66666666666666 L 303.0 -148.66666666666666 L 311.0 -148.66666666666666 L 311.0 -140.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 456.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -513.0390511110129 M 342.4 -513.0390511110129 L 342.4 -513.039 M 342.4 -513.039 A 4 4 0 1 0 334.4 -513.039 A 4 4 0 1 0 342.4 -513.039 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -507.124066793303 M 380.8 -507.124066793303 L 380.8 -507.124 M 380.8 -507.124 A 4 4 0 1 0 372.8 -507.124 A 4 4 0 1 0 380.8 -507.124 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -500.165547554888 M 419.2 -500.165547554888 L 419.2 -500.166 M 419.2 -500.166 A 4 4 0 1 0 411.2 -500.166 A 4 4 0 1 0 419.2 -500.166 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -512.5324689667359 M 457.6 -512.5324689667359 L 457.6 -512.532 M 457.6 -512.532 A 4 4 0 1 0 449.6 -512.532 A 4 4 0 1 0 457.6 -512.532 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -510.3469982771569 M 496.0 -510.3469982771569 L 496 -510.347 M 496 -510.347 A 4 4 0 1 0 488 -510.347 A 4 4 0 1 0 496 -510.347 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -511.8108627468305 M 534.4 -511.8108627468305 L 534.4 -511.811 M 534.4 -511.811 A 4 4 0 1 0 526.4 -511.811 A 4 4 0 1 0 534.4 -511.811 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -520.0 M 572.8 -520.0 L 572.8 -520 M 572.8 -520 A 4 4 0 1 0 564.8 -520 A 4 4 0 1 0 572.8 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -519.6185448601847 M 611.2 -519.6185448601847 L 611.2 -519.619 M 611.2 -519.619 A 4 4 0 1 0 603.2 -519.619 A 4 4 0 1 0 611.2 -519.619 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -519.4800547775766 M 649.6 -519.4800547775766 L 649.6 -519.48 M 649.6 -519.48 A 4 4 0 1 0 641.6 -519.48 A 4 4 0 1 0 649.6 -519.48 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -518.8872200379909 M 688.0 -518.8872200379909 L 688 -518.887 M 688 -518.887 A 4 4 0 1 0 680 -518.887 A 4 4 0 1 0 688 -518.887 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -459.2298007686531 L 332.15 -469.2298007686531 L 344.65 -469.2298007686531 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -498.9995361576181 L 370.55 -508.9995361576181 L 383.05 -508.9995361576181 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -475.7198392013076 L 408.95 -485.7198392013076 L 421.45 -485.7198392013076 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -501.8507311039449 L 447.35 -511.8507311039449 L 459.85 -511.8507311039449 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -469.5606750011044 L 485.75 -479.5606750011044 L 498.25 -479.5606750011044 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -487.7745505146442 L 524.15 -497.7745505146442 L 536.65 -497.7745505146442 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -498.65695542695585 L 562.55 -508.65695542695585 L 575.05 -508.65695542695585 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -508.77037593320676 L 600.95 -518.7703759332068 L 613.45 -518.7703759332068 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -471.89556920086585 L 639.35 -481.89556920086585 L 651.85 -481.89556920086585 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -477.84821310244286 L 677.75 -487.84821310244286 L 690.25 -487.84821310244286 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 332.15 -461.79065247161725 L 344.65 -461.79065247161725 L 338.4 -471.79065247161725 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 370.55 -445.78289967751914 L 383.05 -445.78289967751914 L 376.8 -455.78289967751914 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 408.95 -438.55954852674824 L 421.45 -438.55954852674824 L 415.2 -448.55954852674824 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 447.35 -460.7288951716217 L 459.85 -460.7288951716217 L 453.6 -470.7288951716217 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 485.75 -442.12263109069227 L 498.25 -442.12263109069227 L 492.0 -452.12263109069227 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 524.15 -450.921610637452 L 536.65 -450.921610637452 L 530.4 -460.921610637452 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 562.55 -461.4177011088042 L 575.05 -461.4177011088042 L 568.8 -471.4177011088042 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 600.95 -463.0382780403764 L 613.45 -463.0382780403764 L 607.2 -473.0382780403764 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 639.35 -439.9565976056898 L 651.85 -439.9565976056898 L 645.6 -449.9565976056898 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 677.75 -443.50145779034324 L 690.25 -443.50145779034324 L 684.0 -453.50145779034324 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 331.25714285714287 -390.77818394663603 L 338.4 -397.92104108949314 L 345.54285714285714 -390.77818394663603 L 338.4 -383.63532680377887 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 369.65714285714284 -392.49631134867695 L 376.8 -399.63916849153406 L 383.9428571428571 -392.49631134867695 L 376.8 -385.3534542058198 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 408.0571428571429 -378.634425939833 L 415.2 -385.77728308269013 L 422.34285714285716 -378.634425939833 L 415.2 -371.4915687969759 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 446.45714285714286 -400.8115474665371 L 453.6 -407.95440460939426 L 460.74285714285713 -400.8115474665371 L 453.6 -393.6686903236799 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 484.8571428571429 -407.3802292706631 L 492.0 -414.5230864135202 L 499.1428571428571 -407.3802292706631 L 492.0 -400.23737212780594 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 523.2571428571429 -386.99546097097675 L 530.4 -394.13831811383386 L 537.5428571428572 -386.99546097097675 L 530.4 -379.8526038281196 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 561.6571428571428 -395.8336793744754 L 568.8 -402.97653651733253 L 575.9428571428572 -395.8336793744754 L 568.8 -388.69082223161826 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 600.0571428571428 -404.6042320095419 L 607.2 -411.74708915239904 L 614.3428571428572 -404.6042320095419 L 607.2 -397.46137486668476 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 638.4571428571428 -412.0129654989619 L 645.6 -419.155822641819 L 652.7428571428572 -412.0129654989619 L 645.6 -404.87010835610477 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 676.8571428571429 -415.92834739585635 L 684.0 -423.07120453871346 L 691.1428571428571 -415.92834739585635 L 684.0 -408.78549025299924 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 307.0 -176.66666666666669 M 311.0 -176.66666666666669 L 311 -176.667 M 311 -176.667 A 4 4 0 1 0 303 -176.667 A 4 4 0 1 0 311 -176.667 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 307.0 -153.66666666666666 L 300.75 -163.66666666666666 L 313.25 -163.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 300.75 -135.66666666666666 L 313.25 -135.66666666666666 L 307.0 -145.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 299.85714285714283 -122.66666666666666 L 307.0 -129.8095238095238 L 314.14285714285717 -122.66666666666666 L 307.0 -115.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 3.62e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 7.24e-09
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.09e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.45e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 1.81e-08
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -513.0390511110129 L 376.8 -507.124066793303 L 415.2 -500.165547554888 L 453.6 -512.5324689667359 L 492.0 -510.3469982771569 L 530.4 -511.8108627468305 L 568.8 -520.0 L 607.2 -519.6185448601847 L 645.6 -519.4800547775766 L 684.0 -518.8872200379909" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -505.03905111101295 L 330.4 -521.0390511110129 L 346.4 -521.0390511110129 L 346.4 -505.03905111101295 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -513.0390511110129 M 342.4 -513.0390511110129 L 342.4 -513.039 M 342.4 -513.039 A 4 4 0 1 0 334.4 -513.039 A 4 4 0 1 0 342.4 -513.039 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -499.124066793303 L 368.8 -515.124066793303 L 384.8 -515.124066793303 L 384.8 -499.124066793303 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -507.124066793303 M 380.8 -507.124066793303 L 380.8 -507.124 M 380.8 -507.124 A 4 4 0 1 0 372.8 -507.124 A 4 4 0 1 0 380.8 -507.124 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -492.165547554888 L 407.2 -508.165547554888 L 423.2 -508.165547554888 L 423.2 -492.165547554888 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -500.165547554888 M 419.2 -500.165547554888 L 419.2 -500.166 M 419.2 -500.166 A 4 4 0 1 0 411.2 -500.166 A 4 4 0 1 0 419.2 -500.166 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -504.5324689667359 L 445.6 -520.5324689667359 L 461.6 -520.5324689667359 L 461.6 -504.5324689667359 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -512.5324689667359 M 457.6 -512.5324689667359 L 457.6 -512.532 M 457.6 -512.532 A 4 4 0 1 0 449.6 -512.532 A 4 4 0 1 0 457.6 -512.532 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -502.3469982771569 L 484.0 -518.3469982771569 L 500.0 -518.3469982771569 L 500.0 -502.3469982771569 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -510.3469982771569 M 496.0 -510.3469982771569 L 496 -510.347 M 496 -510.347 A 4 4 0 1 0 488 -510.347 A 4 4 0 1 0 496 -510.347 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -503.8108627468305 L 522.4 -519.8108627468305 L 538.4 -519.8108627468305 L 538.4 -503.8108627468305 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -511.8108627468305 M 534.4 -511.8108627468305 L 534.4 -511.811 M 534.4 -511.811 A 4 4 0 1 0 526.4 -511.811 A 4 4 0 1 0 534.4 -511.811 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -512.0 L 560.8 -528.0 L 576.8 -528.0 L 576.8 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -520.0 M 572.8 -520.0 L 572.8 -520 M 572.8 -520 A 4 4 0 1 0 564.8 -520 A 4 4 0 1 0 572.8 -520 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -511.61854486018467 L 599.2 -527.6185448601847 L 615.2 -527.6185448601847 L 615.2 -511.61854486018467 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -519.6185448601847 M 611.2 -519.6185448601847 L 611.2 -519.619 M 611.2 -519.619 A 4 4 0 1 0 603.2 -519.619 A 4 4 0 1 0 611.2 -519.619 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -511.4800547775766 L 637.6 -527.4800547775766 L 653.6 -527.4800547775766 L 653.6 -511.4800547775766 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -519.4800547775766 M 649.6 -519.4800547775766 L 649.6 -519.48 M 649.6 -519.48 A 4 4 0 1 0 641.6 -519.48 A 4 4 0 1 0 649.6 -519.48 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -510.8872200379909 L 676.0 -526.8872200379909 L 692.0 -526.8872200379909 L 692.0 -510.8872200379909 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -518.8872200379909 M 688.0 -518.8872200379909 L 688 -518.887 M 688 -518.887 A 4 4 0 1 0 680 -518.887 A 4 4 0 1 0 688 -518.887 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -464.2298007686531 L 376.8 -503.9995361576181 L 415.2 -480.7198392013076 L 453.6 -506.8507311039449 L 492.0 -474.5606750011044 L 530.4 -492.7745505146442 L 568.8 -503.65695542695585 L 607.2 -513.7703759332068 L 645.6 -476.89556920086585 L 684.0 -482.84821310244286" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 332.15 -459.2298007686531 L 332.15 -469.2298007686531 L 344.65 -469.2298007686531 L 344.65 -459.2298007686531 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -459.2298007686531 L 332.15 -469.2298007686531 L 344.65 -469.2298007686531 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 370.55 -498.9995361576181 L 370.55 -508.9995361576181 L 383.05 -508.9995361576181 L 383.05 -498.9995361576181 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -498.9995361576181 L 370.55 -508.9995361576181 L 383.05 -508.9995361576181 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.95 -475.7198392013076 L 408.95 -485.7198392013076 L 421.45 -485.7198392013076 L 421.45 -475.7198392013076 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -475.7198392013076 L 408.95 -485.7198392013076 L 421.45 -485.7198392013076 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.35 -501.8507311039449 L 447.35 -511.8507311039449 L 459.85 -511.8507311039449 L 459.85 -501.8507311039449 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -501.8507311039449 L 447.35 -511.8507311039449 L 459.85 -511.8507311039449 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 485.75 -469.5606750011044 L 485.75 -479.5606750011044 L 498.25 -479.5606750011044 L 498.25 -469.5606750011044 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -469.5606750011044 L 485.75 -479.5606750011044 L 498.25 -479.5606750011044 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 524.15 -487.7745505146442 L 524.15 -497.7745505146442 L 536.65 -497.7745505146442 L 536.65 -487.7745505146442 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -487.7745505146442 L 524.15 -497.7745505146442 L 536.65 -497.7745505146442 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 562.55 -498.65695542695585 L 562.55 -508.65695542695585 L 575.05 -508.65695542695585 L 575.05 -498.65695542695585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -498.65695542695585 L 562.55 -508.65695542695585 L 575.05 -508.65695542695585 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.95 -508.77037593320676 L 600.95 -518.7703759332068 L 613.45 -518.7703759332068 L 613.45 -508.77037593320676 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -508.77037593320676 L 600.95 -518.7703759332068 L 613.45 -518.7703759332068 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 639.35 -471.89556920086585 L 639.35 -481.89556920086585 L 651.85 -481.89556920086585 L 651.85 -471.89556920086585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -471.89556920086585 L 639.35 -481.89556920086585 L 651.85 -481.89556920086585 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 677.75 -477.84821310244286 L 677.75 -487.84821310244286 L 690.25 -487.84821310244286 L 690.25 -477.84821310244286 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -477.84821310244286 L 677.75 -487.84821310244286 L 690.25 -487.84821310244286 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -466.79065247161725 L 376.8 -450.78289967751914 L 415.2 -443.55954852674824 L 453.6 -465.7288951716217 L 492.0 -447.12263109069227 L 530.4 -455.921610637452 L 568.8 -466.4177011088042 L 607.2 -468.0382780403764 L 645.6 -444.9565976056898 L 684.0 -448.50145779034324" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -461.79065247161725 L 332.15 -471.79065247161725 L 344.65 -471.79065247161725 L 344.65 -461.79065247161725 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -461.79065247161725 L 344.65 -461.79065247161725 L 338.4 -471.79065247161725 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -445.78289967751914 L 370.55 -455.78289967751914 L 383.05 -455.78289967751914 L 383.05 -445.78289967751914 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -445.78289967751914 L 383.05 -445.78289967751914 L 376.8 -455.78289967751914 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -438.55954852674824 L 408.95 -448.55954852674824 L 421.45 -448.55954852674824 L 421.45 -438.55954852674824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -438.55954852674824 L 421.45 -438.55954852674824 L 415.2 -448.55954852674824 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -460.7288951716217 L 447.35 -470.7288951716217 L 459.85 -470.7288951716217 L 459.85 -460.7288951716217 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -460.7288951716217 L 459.85 -460.7288951716217 L 453.6 -470.7288951716217 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -442.12263109069227 L 485.75 -452.12263109069227 L 498.25 -452.12263109069227 L 498.25 -442.12263109069227 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -442.12263109069227 L 498.25 -442.12263109069227 L 492.0 -452.12263109069227 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -450.921610637452 L 524.15 -460.921610637452 L 536.65 -460.921610637452 L 536.65 -450.921610637452 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -450.921610637452 L 536.65 -450.921610637452 L 530.4 -460.921610637452 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -461.4177011088042 L 562.55 -471.4177011088042 L 575.05 -471.4177011088042 L 575.05 -461.4177011088042 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -461.4177011088042 L 575.05 -461.4177011088042 L 568.8 -471.4177011088042 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -463.0382780403764 L 600.95 -473.0382780403764 L 613.45 -473.0382780403764 L 613.45 -463.0382780403764 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -463.0382780403764 L 613.45 -463.0382780403764 L 607.2 -473.0382780403764 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -439.9565976056898 L 639.35 -449.9565976056898 L 651.85 -449.9565976056898 L 651.85 -439.9565976056898 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -439.9565976056898 L 651.85 -439.9565976056898 L 645.6 -449.9565976056898 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -443.50145779034324 L 677.75 -453.50145779034324 L 690.25 -453.50145779034324 L 690.25 -443.50145779034324 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -443.50145779034324 L 690.25 -443.50145779034324 L 684.0 -453.50145779034324 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -390.77818394663603 L 376.8 -392.49631134867695 L 415.2 -378.634425939833 L 453.6 -400.8115474665371 L 492.0 -407.3802292706631 L 530.4 -386.99546097097675 L 568.8 -395.8336793744754 L 607.2 -404.6042320095419 L 645.6 -412.0129654989619 L 684.0 -415.92834739585635" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 331.25714285714287 -383.63532680377887 L 331.25714285714287 -397.92104108949314 L 345.54285714285714 -397.92104108949314 L 345.54285714285714 -383.63532680377887 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -390.77818394663603 L 338.4 -397.92104108949314 L 345.54285714285714 -390.77818394663603 L 338.4 -383.63532680377887 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 369.65714285714284 -385.3534542058198 L 369.65714285714284 -399.63916849153406 L 383.9428571428571 -399.63916849153406 L 383.9428571428571 -385.3534542058198 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -392.49631134867695 L 376.8 -399.63916849153406 L 383.9428571428571 -392.49631134867695 L 376.8 -385.3534542058198 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 408.0571428571429 -371.4915687969759 L 408.0571428571429 -385.77728308269013 L 422.34285714285716 -385.77728308269013 L 422.34285714285716 -371.4915687969759 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -378.634425939833 L 415.2 -385.77728308269013 L 422.34285714285716 -378.634425939833 L 415.2 -371.4915687969759 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 446.45714285714286 -393.6686903236799 L 446.45714285714286 -407.95440460939426 L 460.74285714285713 -407.95440460939426 L 460.74285714285713 -393.6686903236799 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -400.8115474665371 L 453.6 -407.95440460939426 L 460.74285714285713 -400.8115474665371 L 453.6 -393.6686903236799 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 484.8571428571429 -400.23737212780594 L 484.8571428571429 -414.5230864135202 L 499.1428571428571 -414.5230864135202 L 499.1428571428571 -400.23737212780594 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -407.3802292706631 L 492.0 -414.5230864135202 L 499.1428571428571 -407.3802292706631 L 492.0 -400.23737212780594 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 523.2571428571429 -379.8526038281196 L 523.2571428571429 -394.13831811383386 L 537.5428571428572 -394.13831811383386 L 537.5428571428572 -379.8526038281196 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -386.99546097097675 L 530.4 -394.13831811383386 L 537.5428571428572 -386.99546097097675 L 530.4 -379.8526038281196 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 561.6571428571428 -388.69082223161826 L 561.6571428571428 -402.97653651733253 L 575.9428571428572 -402.97653651733253 L 575.9428571428572 -388.69082223161826 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -395.8336793744754 L 568.8 -402.97653651733253 L 575.9428571428572 -395.8336793744754 L 568.8 -388.69082223161826 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 600.0571428571428 -397.46137486668476 L 600.0571428571428 -411.74708915239904 L 614.3428571428572 -411.74708915239904 L 614.3428571428572 -397.46137486668476 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -404.6042320095419 L 607.2 -411.74708915239904 L 614.3428571428572 -404.6042320095419 L 607.2 -397.46137486668476 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 638.4571428571428 -404.87010835610477 L 638.4571428571428 -419.155822641819 L 652.7428571428572 -419.155822641819 L 652.7428571428572 -404.87010835610477 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -412.0129654989619 L 645.6 -419.155822641819 L 652.7428571428572 -412.0129654989619 L 645.6 -404.87010835610477 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 676.8571428571429 -408.78549025299924 L 676.8571428571429 -423.07120453871346 L 691.1428571428571 -423.07120453871346 L 691.1428571428571 -408.78549025299924 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -415.92834739585635 L 684.0 -423.07120453871346 L 691.1428571428571 -415.92834739585635 L 684.0 -408.78549025299924 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -364.56735654017757 L 376.8 -363.4165525467156 L 415.2 -363.14406723505766 L 453.6 -373.6615386314441 L 492.0 -381.0245946901091 L 530.4 -370.7747493042364 L 568.8 -376.09774926006094 L 607.2 -379.5363122321862 L 645.6 -384.6173189910324 L 684.0 -387.67527720104255" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 333.4 -359.56735654017757 L 343.4 -369.56735654017757" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -359.56735654017757 L 333.4 -369.56735654017757" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -358.4165525467156 L 381.8 -368.4165525467156" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -358.4165525467156 L 371.8 -368.4165525467156" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -358.14406723505766 L 420.2 -368.14406723505766" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -358.14406723505766 L 410.2 -368.14406723505766" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -368.6615386314441 L 458.6 -378.6615386314441" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -368.6615386314441 L 448.6 -378.6615386314441" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -376.0245946901091 L 497.0 -386.0245946901091" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -376.0245946901091 L 487.0 -386.0245946901091" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -365.7747493042364 L 535.4 -375.7747493042364" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -365.7747493042364 L 525.4 -375.7747493042364" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -371.09774926006094 L 573.8 -381.09774926006094" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -371.09774926006094 L 563.8 -381.09774926006094" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -374.5363122321862 L 612.2 -384.5363122321862" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -374.5363122321862 L 602.2 -384.5363122321862" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -379.6173189910324 L 650.6 -389.6173189910324" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -379.6173189910324 L 640.6 -389.6173189910324" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -382.67527720104255 L 689.0 -392.67527720104255" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -382.67527720104255 L 679.0 -392.67527720104255" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -176.66666666666669 L 314 -176.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 299.0 -168.66666666666669 L 299.0 -184.66666666666669 L 315.0 -184.66666666666669 L 315.0 -168.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -176.66666666666669 M 311.0 -176.66666666666669 L 311 -176.667 M 311 -176.667 A 4 4 0 1 0 303 -176.667 A 4 4 0 1 0 311 -176.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-172.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -158.66666666666666 L 314 -158.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 300.75 -153.66666666666666 L 300.75 -163.66666666666666 L 313.25 -163.66666666666666 L 313.25 -153.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -153.66666666666666 L 300.75 -163.66666666666666 L 313.25 -163.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -140.66666666666666 L 314 -140.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 300.75 -135.66666666666666 L 300.75 -145.66666666666666 L 313.25 -145.66666666666666 L 313.25 -135.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -135.66666666666666 L 313.25 -135.66666666666666 L 307.0 -145.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-136.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -122.66666666666666 L 314 -122.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 299.85714285714283 -115.52380952380952 L 299.85714285714283 -129.8095238095238 L 314.14285714285717 -129.8095238095238 L 314.14285714285717 -115.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -122.66666666666666 L 307.0 -129.8095238095238 L 314.14285714285717 -122.66666666666666 L 307.0 -115.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-118.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -104.66666666666666 L 314 -104.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -99.66666666666666 L 312.0 -109.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -99.66666666666666 L 302.0 -109.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-100.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 456.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -489.255309191219 M 342.4 -489.255309191219 L 342.4 -489.255 M 342.4 -489.255 A 4 4 0 1 0 334.4 -489.255 A 4 4 0 1 0 342.4 -489.255 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -500.4818879082035 M 380.8 -500.4818879082035 L 380.8 -500.482 M 380.8 -500.482 A 4 4 0 1 0 372.8 -500.482 A 4 4 0 1 0 380.8 -500.482 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -490.50418733722796 M 419.2 -490.50418733722796 L 419.2 -490.504 M 419.2 -490.504 A 4 4 0 1 0 411.2 -490.504 A 4 4 0 1 0 419.2 -490.504 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -500.1269690946432 M 457.6 -500.1269690946432 L 457.6 -500.127 M 457.6 -500.127 A 4 4 0 1 0 449.6 -500.127 A 4 4 0 1 0 457.6 -500.127 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -514.9996421079293 M 496.0 -514.9996421079293 L 496 -515 M 496 -515 A 4 4 0 1 0 488 -515 A 4 4 0 1 0 496 -515 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -503.2497701231699 M 534.4 -503.2497701231699 L 534.4 -503.25 M 534.4 -503.25 A 4 4 0 1 0 526.4 -503.25 A 4 4 0 1 0 534.4 -503.25 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -502.98327818124756 M 572.8 -502.98327818124756 L 572.8 -502.983 M 572.8 -502.983 A 4 4 0 1 0 564.8 -502.983 A 4 4 0 1 0 572.8 -502.983 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -516.1067949939159 M 611.2 -516.1067949939159 L 611.2 -516.107 M 611.2 -516.107 A 4 4 0 1 0 603.2 -516.107 A 4 4 0 1 0 611.2 -516.107 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -506.3265407253647 M 649.6 -506.3265407253647 L 649.6 -506.327 M 649.6 -506.327 A 4 4 0 1 0 641.6 -506.327 A 4 4 0 1 0 649.6 -506.327 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -508.29010180652904 M 688.0 -508.29010180652904 L 688 -508.29 M 688 -508.29 A 4 4 0 1 0 680 -508.29 A 4 4 0 1 0 688 -508.29 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -470.9876444645109 L 332.15 -480.9876444645109 L 344.65 -480.9876444645109 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -510.4732709683459 L 370.55 -520.4732709683459 L 383.05 -520.4732709683459 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -487.7475649574109 L 408.95 -497.7475649574109 L 421.45 -497.7475649574109 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -502.4191576872464 L 447.35 -512.4191576872464 L 459.85 -512.4191576872464 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -479.1798490246065 L 485.75 -489.1798490246065 L 498.25 -489.1798490246065 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -499.38357220334876 L 524.15 -509.38357220334876 L 536.65 -509.38357220334876 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -508.1547910736212 L 562.55 -518.1547910736213 L 575.05 -518.1547910736213 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -515.0 L 600.95 -525.0 L 613.45 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -481.665492046537 L 639.35 -491.665492046537 L 651.85 -491.665492046537 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -487.03288202225536 L 677.75 -497.03288202225536 L 690.25 -497.03288202225536 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 332.15 -469.4928669357281 L 344.65 -469.4928669357281 L 338.4 -479.4928669357281 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 370.55 -454.5959673822673 L 383.05 -454.5959673822673 L 376.8 -464.5959673822673 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 408.95 -449.29035508399454 L 421.45 -449.29035508399454 L 415.2 -459.29035508399454 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 447.35 -470.4667738507535 L 459.85 -470.4667738507535 L 453.6 -480.4667738507535 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 485.75 -451.10613427009287 L 498.25 -451.10613427009287 L 492.0 -461.10613427009287 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 524.15 -455.13016259312076 L 536.65 -455.13016259312076 L 530.4 -465.13016259312076 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 562.55 -463.3780881956183 L 575.05 -463.3780881956183 L 568.8 -473.3780881956183 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 600.95 -470.93676873014385 L 613.45 -470.93676873014385 L 607.2 -480.93676873014385 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 639.35 -442.75282321783516 L 651.85 -442.75282321783516 L 645.6 -452.75282321783516 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 677.75 -453.34345525523213 L 690.25 -453.34345525523213 L 684.0 -463.34345525523213 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 331.25714285714287 -387.5456312390223 L 338.4 -394.6884883818795 L 345.54285714285714 -387.5456312390223 L 338.4 -380.4027740961652 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 369.65714285714284 -384.89985078653666 L 376.8 -392.0427079293938 L 383.9428571428571 -384.89985078653666 L 376.8 -377.7569936436795 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 408.0571428571429 -380.2014767177443 L 415.2 -387.3443338606014 L 422.34285714285716 -380.2014767177443 L 415.2 -373.05861957488713 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 446.45714285714286 -391.5973989505503 L 453.6 -398.7402560934075 L 460.74285714285713 -391.5973989505503 L 453.6 -384.4545418076932 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 484.8571428571429 -406.074937093586 L 492.0 -413.2177942364432 L 499.1428571428571 -406.074937093586 L 492.0 -398.9320799507289 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 523.2571428571429 -388.20289727396363 L 530.4 -395.3457544168208 L 537.5428571428572 -388.20289727396363 L 530.4 -381.06004013110646 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 561.6571428571428 -398.0283340399408 L 568.8 -405.1711911827979 L 575.9428571428572 -398.0283340399408 L 568.8 -390.8854768970836 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 600.0571428571428 -408.78625033724444 L 607.2 -415.9291074801016 L 614.3428571428572 -408.78625033724444 L 607.2 -401.64339319438733 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 638.4571428571428 -409.21021479030276 L 645.6 -416.3530719331599 L 652.7428571428572 -409.21021479030276 L 645.6 -402.06735764744565 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 676.8571428571429 -414.2761054735463 L 684.0 -421.4189626164034 L 691.1428571428571 -414.2761054735463 L 684.0 -407.1332483306891 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 307.0 -176.66666666666669 M 311.0 -176.66666666666669 L 311 -176.667 M 311 -176.667 A 4 4 0 1 0 303 -176.667 A 4 4 0 1 0 311 -176.667 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 307.0 -153.66666666666666 L 300.75 -163.66666666666666 L 313.25 -163.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 300.75 -135.66666666666666 L 313.25 -135.66666666666666 L 307.0 -145.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 299.85714285714283 -122.66666666666666 L 307.0 -129.8095238095238 L 314.14285714285717 -122.66666666666666 L 307.0 -115.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 3.63e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 7.26e-09
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.09e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.45e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 1.82e-08
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -489.255309191219 L 376.8 -500.4818879082035 L 415.2 -490.50418733722796 L 453.6 -500.1269690946432 L 492.0 -514.9996421079293 L 530.4 -503.2497701231699 L 568.8 -502.98327818124756 L 607.2 -516.1067949939159 L 645.6 -506.3265407253647 L 684.0 -508.29010180652904" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -481.255309191219 L 330.4 -497.255309191219 L 346.4 -497.255309191219 L 346.4 -481.255309191219 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -489.255309191219 M 342.4 -489.255309191219 L 342.4 -489.255 M 342.4 -489.255 A 4 4 0 1 0 334.4 -489.255 A 4 4 0 1 0 342.4 -489.255 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -492.4818879082035 L 368.8 -508.4818879082035 L 384.8 -508.4818879082035 L 384.8 -492.4818879082035 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -500.4818879082035 M 380.8 -500.4818879082035 L 380.8 -500.482 M 380.8 -500.482 A 4 4 0 1 0 372.8 -500.482 A 4 4 0 1 0 380.8 -500.482 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -482.50418733722796 L 407.2 -498.50418733722796 L 423.2 -498.50418733722796 L 423.2 -482.50418733722796 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -490.50418733722796 M 419.2 -490.50418733722796 L 419.2 -490.504 M 419.2 -490.504 A 4 4 0 1 0 411.2 -490.504 A 4 4 0 1 0 419.2 -490.504 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -492.1269690946432 L 445.6 -508.1269690946432 L 461.6 -508.1269690946432 L 461.6 -492.1269690946432 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -500.1269690946432 M 457.6 -500.1269690946432 L 457.6 -500.127 M 457.6 -500.127 A 4 4 0 1 0 449.6 -500.127 A 4 4 0 1 0 457.6 -500.127 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -506.9996421079293 L 484.0 -522.9996421079293 L 500.0 -522.9996421079293 L 500.0 -506.9996421079293 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -514.9996421079293 M 496.0 -514.9996421079293 L 496 -515 M 496 -515 A 4 4 0 1 0 488 -515 A 4 4 0 1 0 496 -515 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -495.2497701231699 L 522.4 -511.2497701231699 L 538.4 -511.2497701231699 L 538.4 -495.2497701231699 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -503.2497701231699 M 534.4 -503.2497701231699 L 534.4 -503.25 M 534.4 -503.25 A 4 4 0 1 0 526.4 -503.25 A 4 4 0 1 0 534.4 -503.25 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -494.98327818124756 L 560.8 -510.98327818124756 L 576.8 -510.98327818124756 L 576.8 -494.98327818124756 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -502.98327818124756 M 572.8 -502.98327818124756 L 572.8 -502.983 M 572.8 -502.983 A 4 4 0 1 0 564.8 -502.983 A 4 4 0 1 0 572.8 -502.983 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -508.10679499391586 L 599.2 -524.1067949939159 L 615.2 -524.1067949939159 L 615.2 -508.10679499391586 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -516.1067949939159 M 611.2 -516.1067949939159 L 611.2 -516.107 M 611.2 -516.107 A 4 4 0 1 0 603.2 -516.107 A 4 4 0 1 0 611.2 -516.107 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -498.3265407253647 L 637.6 -514.3265407253647 L 653.6 -514.3265407253647 L 653.6 -498.3265407253647 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -506.3265407253647 M 649.6 -506.3265407253647 L 649.6 -506.327 M 649.6 -506.327 A 4 4 0 1 0 641.6 -506.327 A 4 4 0 1 0 649.6 -506.327 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -500.29010180652904 L 676.0 -516.290101806529 L 692.0 -516.290101806529 L 692.0 -500.29010180652904 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -508.29010180652904 M 688.0 -508.29010180652904 L 688 -508.29 M 688 -508.29 A 4 4 0 1 0 680 -508.29 A 4 4 0 1 0 688 -508.29 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -475.9876444645109 L 376.8 -515.4732709683459 L 415.2 -492.7475649574109 L 453.6 -507.4191576872464 L 492.0 -484.1798490246065 L 530.4 -504.38357220334876 L 568.8 -513.1547910736213 L 607.2 -520.0 L 645.6 -486.665492046537 L 684.0 -492.03288202225536" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 332.15 -470.9876444645109 L 332.15 -480.9876444645109 L 344.65 -480.9876444645109 L 344.65 -470.9876444645109 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -470.9876444645109 L 332.15 -480.9876444645109 L 344.65 -480.9876444645109 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 370.55 -510.4732709683459 L 370.55 -520.4732709683459 L 383.05 -520.4732709683459 L 383.05 -510.4732709683459 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -510.4732709683459 L 370.55 -520.4732709683459 L 383.05 -520.4732709683459 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.95 -487.7475649574109 L 408.95 -497.7475649574109 L 421.45 -497.7475649574109 L 421.45 -487.7475649574109 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -487.7475649574109 L 408.95 -497.7475649574109 L 421.45 -497.7475649574109 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.35 -502.4191576872464 L 447.35 -512.4191576872464 L 459.85 -512.4191576872464 L 459.85 -502.4191576872464 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -502.4191576872464 L 447.35 -512.4191576872464 L 459.85 -512.4191576872464 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 485.75 -479.1798490246065 L 485.75 -489.1798490246065 L 498.25 -489.1798490246065 L 498.25 -479.1798490246065 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -479.1798490246065 L 485.75 -489.1798490246065 L 498.25 -489.1798490246065 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 524.15 -499.38357220334876 L 524.15 -509.38357220334876 L 536.65 -509.38357220334876 L 536.65 -499.38357220334876 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -499.38357220334876 L 524.15 -509.38357220334876 L 536.65 -509.38357220334876 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 562.55 -508.1547910736212 L 562.55 -518.1547910736213 L 575.05 -518.1547910736213 L 575.05 -508.1547910736212 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -508.1547910736212 L 562.55 -518.1547910736213 L 575.05 -518.1547910736213 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.95 -515.0 L 600.95 -525.0 L 613.45 -525.0 L 613.45 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -515.0 L 600.95 -525.0 L 613.45 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 639.35 -481.665492046537 L 639.35 -491.665492046537 L 651.85 -491.665492046537 L 651.85 -481.665492046537 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -481.665492046537 L 639.35 -491.665492046537 L 651.85 -491.665492046537 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 677.75 -487.03288202225536 L 677.75 -497.03288202225536 L 690.25 -497.03288202225536 L 690.25 -487.03288202225536 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -487.03288202225536 L 677.75 -497.03288202225536 L 690.25 -497.03288202225536 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -474.4928669357281 L 376.8 -459.5959673822673 L 415.2 -454.29035508399454 L 453.6 -475.4667738507535 L 492.0 -456.10613427009287 L 530.4 -460.13016259312076 L 568.8 -468.3780881956183 L 607.2 -475.93676873014385 L 645.6 -447.75282321783516 L 684.0 -458.34345525523213" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -469.4928669357281 L 332.15 -479.4928669357281 L 344.65 -479.4928669357281 L 344.65 -469.4928669357281 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -469.4928669357281 L 344.65 -469.4928669357281 L 338.4 -479.4928669357281 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -454.5959673822673 L 370.55 -464.5959673822673 L 383.05 -464.5959673822673 L 383.05 -454.5959673822673 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -454.5959673822673 L 383.05 -454.5959673822673 L 376.8 -464.5959673822673 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -449.29035508399454 L 408.95 -459.29035508399454 L 421.45 -459.29035508399454 L 421.45 -449.29035508399454 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -449.29035508399454 L 421.45 -449.29035508399454 L 415.2 -459.29035508399454 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -470.4667738507535 L 447.35 -480.4667738507535 L 459.85 -480.4667738507535 L 459.85 -470.4667738507535 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -470.4667738507535 L 459.85 -470.4667738507535 L 453.6 -480.4667738507535 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -451.10613427009287 L 485.75 -461.10613427009287 L 498.25 -461.10613427009287 L 498.25 -451.10613427009287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -451.10613427009287 L 498.25 -451.10613427009287 L 492.0 -461.10613427009287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -455.13016259312076 L 524.15 -465.13016259312076 L 536.65 -465.13016259312076 L 536.65 -455.13016259312076 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -455.13016259312076 L 536.65 -455.13016259312076 L 530.4 -465.13016259312076 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -463.3780881956183 L 562.55 -473.3780881956183 L 575.05 -473.3780881956183 L 575.05 -463.3780881956183 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -463.3780881956183 L 575.05 -463.3780881956183 L 568.8 -473.3780881956183 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -470.93676873014385 L 600.95 -480.93676873014385 L 613.45 -480.93676873014385 L 613.45 -470.93676873014385 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -470.93676873014385 L 613.45 -470.93676873014385 L 607.2 -480.93676873014385 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -442.75282321783516 L 639.35 -452.75282321783516 L 651.85 -452.75282321783516 L 651.85 -442.75282321783516 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -442.75282321783516 L 651.85 -442.75282321783516 L 645.6 -452.75282321783516 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -453.34345525523213 L 677.75 -463.34345525523213 L 690.25 -463.34345525523213 L 690.25 -453.34345525523213 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -453.34345525523213 L 690.25 -453.34345525523213 L 684.0 -463.34345525523213 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -387.5456312390223 L 376.8 -384.89985078653666 L 415.2 -380.2014767177443 L 453.6 -391.5973989505503 L 492.0 -406.074937093586 L 530.4 -388.20289727396363 L 568.8 -398.0283340399408 L 607.2 -408.78625033724444 L 645.6 -409.21021479030276 L 684.0 -414.2761054735463" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 331.25714285714287 -380.4027740961652 L 331.25714285714287 -394.6884883818795 L 345.54285714285714 -394.6884883818795 L 345.54285714285714 -380.4027740961652 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -387.5456312390223 L 338.4 -394.6884883818795 L 345.54285714285714 -387.5456312390223 L 338.4 -380.4027740961652 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 369.65714285714284 -377.7569936436795 L 369.65714285714284 -392.0427079293938 L 383.9428571428571 -392.0427079293938 L 383.9428571428571 -377.7569936436795 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -384.89985078653666 L 376.8 -392.0427079293938 L 383.9428571428571 -384.89985078653666 L 376.8 -377.7569936436795 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 408.0571428571429 -373.05861957488713 L 408.0571428571429 -387.3443338606014 L 422.34285714285716 -387.3443338606014 L 422.34285714285716 -373.05861957488713 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -380.2014767177443 L 415.2 -387.3443338606014 L 422.34285714285716 -380.2014767177443 L 415.2 -373.05861957488713 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 446.45714285714286 -384.4545418076932 L 446.45714285714286 -398.7402560934075 L 460.74285714285713 -398.7402560934075 L 460.74285714285713 -384.4545418076932 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -391.5973989505503 L 453.6 -398.7402560934075 L 460.74285714285713 -391.5973989505503 L 453.6 -384.4545418076932 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 484.8571428571429 -398.9320799507289 L 484.8571428571429 -413.2177942364432 L 499.1428571428571 -413.2177942364432 L 499.1428571428571 -398.9320799507289 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -406.074937093586 L 492.0 -413.2177942364432 L 499.1428571428571 -406.074937093586 L 492.0 -398.9320799507289 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 523.2571428571429 -381.06004013110646 L 523.2571428571429 -395.3457544168208 L 537.5428571428572 -395.3457544168208 L 537.5428571428572 -381.06004013110646 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -388.20289727396363 L 530.4 -395.3457544168208 L 537.5428571428572 -388.20289727396363 L 530.4 -381.06004013110646 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 561.6571428571428 -390.8854768970836 L 561.6571428571428 -405.1711911827979 L 575.9428571428572 -405.1711911827979 L 575.9428571428572 -390.8854768970836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -398.0283340399408 L 568.8 -405.1711911827979 L 575.9428571428572 -398.0283340399408 L 568.8 -390.8854768970836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 600.0571428571428 -401.64339319438733 L 600.0571428571428 -415.9291074801016 L 614.3428571428572 -415.9291074801016 L 614.3428571428572 -401.64339319438733 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -408.78625033724444 L 607.2 -415.9291074801016 L 614.3428571428572 -408.78625033724444 L 607.2 -401.64339319438733 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 638.4571428571428 -402.06735764744565 L 638.4571428571428 -416.3530719331599 L 652.7428571428572 -416.3530719331599 L 652.7428571428572 -402.06735764744565 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -409.21021479030276 L 645.6 -416.3530719331599 L 652.7428571428572 -409.21021479030276 L 645.6 -402.06735764744565 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 676.8571428571429 -407.1332483306891 L 676.8571428571429 -421.4189626164034 L 691.1428571428571 -421.4189626164034 L 691.1428571428571 -407.1332483306891 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -414.2761054735463 L 684.0 -421.4189626164034 L 691.1428571428571 -414.2761054735463 L 684.0 -407.1332483306891 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -365.9034572374036 L 376.8 -362.27504831542956 L 415.2 -363.2104350315771 L 453.6 -369.4952840837137 L 492.0 -377.070559798259 L 530.4 -369.5476134104912 L 568.8 -375.4472604738491 L 607.2 -378.7883426293505 L 645.6 -381.04286445801375 L 684.0 -386.12825750609795" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 333.4 -360.9034572374036 L 343.4 -370.9034572374036" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -360.9034572374036 L 333.4 -370.9034572374036" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -357.27504831542956 L 381.8 -367.27504831542956" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -357.27504831542956 L 371.8 -367.27504831542956" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -358.2104350315771 L 420.2 -368.2104350315771" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -358.2104350315771 L 410.2 -368.2104350315771" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -364.4952840837137 L 458.6 -374.4952840837137" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -364.4952840837137 L 448.6 -374.4952840837137" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -372.070559798259 L 497.0 -382.070559798259" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -372.070559798259 L 487.0 -382.070559798259" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -364.5476134104912 L 535.4 -374.5476134104912" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -364.5476134104912 L 525.4 -374.5476134104912" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -370.4472604738491 L 573.8 -380.4472604738491" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -370.4472604738491 L 563.8 -380.4472604738491" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -373.7883426293505 L 612.2 -383.7883426293505" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -373.7883426293505 L 602.2 -383.7883426293505" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -376.04286445801375 L 650.6 -386.04286445801375" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -376.04286445801375 L 640.6 -386.04286445801375" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -381.12825750609795 L 689.0 -391.12825750609795" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -381.12825750609795 L 679.0 -391.12825750609795" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -176.66666666666669 L 314 -176.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 299.0 -168.66666666666669 L 299.0 -184.66666666666669 L 315.0 -184.66666666666669 L 315.0 -168.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -176.66666666666669 M 311.0 -176.66666666666669 L 311 -176.667 M 311 -176.667 A 4 4 0 1 0 303 -176.667 A 4 4 0 1 0 311 -176.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-172.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -158.66666666666666 L 314 -158.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 300.75 -153.66666666666666 L 300.75 -163.66666666666666 L 313.25 -163.66666666666666 L 313.25 -153.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -153.66666666666666 L 300.75 -163.66666666666666 L 313.25 -163.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -140.66666666666666 L 314 -140.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 300.75 -135.66666666666666 L 300.75 -145.66666666666666 L 313.25 -145.66666666666666 L 313.25 -135.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -135.66666666666666 L 313.25 -135.66666666666666 L 307.0 -145.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-136.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -122.66666666666666 L 314 -122.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 299.85714285714283 -115.52380952380952 L 299.85714285714283 -129.8095238095238 L 314.14285714285717 -129.8095238095238 L 314.14285714285717 -115.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -122.66666666666666 L 307.0 -129.8095238095238 L 314.14285714285717 -122.66666666666666 L 307.0 -115.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-118.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -104.66666666666666 L 314 -104.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -99.66666666666666 L 312.0 -109.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -99.66666666666666 L 302.0 -109.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-100.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 456.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 332.15 -473.62481833173945 L 344.65 -473.62481833173945 L 338.4 -483.62481833173945 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 370.55 -471.2789822059233 L 383.05 -471.2789822059233 L 376.8 -481.2789822059233 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 408.95 -485.7101817059121 L 421.45 -485.7101817059121 L 415.2 -495.7101817059121 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 447.35 -472.0692109008487 L 459.85 -472.0692109008487 L 453.6 -482.0692109008487 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 485.75 -502.86493670790753 L 498.25 -502.86493670790753 L 492.0 -512.8649367079075 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 524.15 -489.1229094030739 L 536.65 -489.1229094030739 L 530.4 -499.1229094030739 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 562.55 -482.8308997944231 L 575.05 -482.8308997944231 L 568.8 -492.8308997944231 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 600.95 -477.7200915683336 L 613.45 -477.7200915683336 L 607.2 -487.7200915683336 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 639.35 -515.0 L 651.85 -515.0 L 645.6 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 677.75 -503.90532165636273 L 690.25 -503.90532165636273 L 684.0 -513.9053216563627 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -508.1896428383171 M 342.4 -508.1896428383171 L 342.4 -508.19 M 342.4 -508.19 A 4 4 0 1 0 334.4 -508.19 A 4 4 0 1 0 342.4 -508.19 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -472.9258944102653 M 380.8 -472.9258944102653 L 380.8 -472.926 M 380.8 -472.926 A 4 4 0 1 0 372.8 -472.926 A 4 4 0 1 0 380.8 -472.926 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -484.19452246662195 M 419.2 -484.19452246662195 L 419.2 -484.195 M 419.2 -484.195 A 4 4 0 1 0 411.2 -484.195 A 4 4 0 1 0 419.2 -484.195 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -472.70887143534867 M 457.6 -472.70887143534867 L 457.6 -472.709 M 457.6 -472.709 A 4 4 0 1 0 449.6 -472.709 A 4 4 0 1 0 457.6 -472.709 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -494.8568115243568 M 496.0 -494.8568115243568 L 496 -494.857 M 496 -494.857 A 4 4 0 1 0 488 -494.857 A 4 4 0 1 0 496 -494.857 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -485.7617265450274 M 534.4 -485.7617265450274 L 534.4 -485.762 M 534.4 -485.762 A 4 4 0 1 0 526.4 -485.762 A 4 4 0 1 0 534.4 -485.762 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -487.8308997944231 M 572.8 -487.8308997944231 L 572.8 -487.831 M 572.8 -487.831 A 4 4 0 1 0 564.8 -487.831 A 4 4 0 1 0 572.8 -487.831 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -475.30817714255596 M 611.2 -475.30817714255596 L 611.2 -475.308 M 611.2 -475.308 A 4 4 0 1 0 603.2 -475.308 A 4 4 0 1 0 611.2 -475.308 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -505.84546337643167 M 649.6 -505.84546337643167 L 649.6 -505.845 M 649.6 -505.845 A 4 4 0 1 0 641.6 -505.845 A 4 4 0 1 0 649.6 -505.845 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -500.40332236421006 M 688.0 -500.40332236421006 L 688 -500.403 M 688 -500.403 A 4 4 0 1 0 680 -500.403 A 4 4 0 1 0 688 -500.403 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -507.39259923040436 L 332.15 -517.3925992304044 L 344.65 -517.3925992304044 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -463.865411116215 L 370.55 -473.865411116215 L 383.05 -473.865411116215 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -470.4572768963154 L 408.95 -480.4572768963154 L 421.45 -480.4572768963154 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -463.49266173181627 L 447.35 -473.49266173181627 L 459.85 -473.49266173181627 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -482.3604072381153 L 485.75 -492.3604072381153 L 498.25 -492.3604072381153 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -473.1973990376289 L 524.15 -483.1973990376289 L 536.65 -483.1973990376289 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -466.4166735694331 L 562.55 -476.4166735694331 L 575.05 -476.4166735694331 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -461.1584222535148 L 600.95 -471.1584222535148 L 613.45 -471.1584222535148 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -491.8779415197632 L 639.35 -501.8779415197632 L 651.85 -501.8779415197632 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -487.59546525900436 L 677.75 -497.59546525900436 L 690.25 -497.59546525900436 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 331.25714285714287 -455.9212331603877 L 338.4 -463.0640903032448 L 345.54285714285714 -455.9212331603877 L 338.4 -448.77837601753055 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 369.65714285714284 -455.83574930156556 L 376.8 -462.97860644442267 L 383.9428571428571 -455.83574930156556 L 376.8 -448.69289215870845 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 408.0571428571429 -463.893596993908 L 415.2 -471.0364541367651 L 422.34285714285716 -463.893596993908 L 415.2 -456.75073985105087 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 446.45714285714286 -451.16064368924003 L 453.6 -458.30350083209714 L 460.74285714285713 -451.16064368924003 L 453.6 -444.01778654638287 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 484.8571428571429 -445.08284072682363 L 492.0 -452.2256978696808 L 499.1428571428571 -445.08284072682363 L 492.0 -437.9399835839665 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 523.2571428571429 -467.46884342266765 L 530.4 -474.6117005655248 L 537.5428571428572 -467.46884342266765 L 530.4 -460.32598627981054 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 561.6571428571428 -460.60859808580017 L 568.8 -467.7514552286573 L 575.9428571428572 -460.60859808580017 L 568.8 -453.465740942943 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 600.0571428571428 -458.9030625691845 L 607.2 -466.04591971204167 L 614.3428571428572 -458.9030625691845 L 607.2 -451.7602054263274 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 638.4571428571428 -451.188309976882 L 645.6 -458.3311671197391 L 652.7428571428572 -451.188309976882 L 645.6 -444.0454528340249 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 676.8571428571429 -448.5414580148648 L 684.0 -455.6843151577219 L 691.1428571428571 -448.5414580148648 L 684.0 -441.3986008720077 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 300.75 -171.66666666666669 L 313.25 -171.66666666666669 L 307.0 -181.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 307.0 -158.66666666666666 M 311.0 -158.66666666666666 L 311 -158.667 M 311 -158.667 A 4 4 0 1 0 303 -158.667 A 4 4 0 1 0 311 -158.667 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 307.0 -135.66666666666666 L 300.75 -145.66666666666666 L 313.25 -145.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 299.85714285714283 -104.66666666666666 L 307.0 -111.8095238095238 L 314.14285714285717 -104.66666666666666 L 307.0 -97.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -465.6663930661084 L 780 -465.6663930661084" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 2.66e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 5.31e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 7.97e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.06e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 1.33e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -478.62481833173945 L 376.8 -476.2789822059233 L 415.2 -490.7101817059121 L 453.6 -477.0692109008487 L 492.0 -507.86493670790753 L 530.4 -494.1229094030739 L 568.8 -487.8308997944231 L 607.2 -482.7200915683336 L 645.6 -520.0 L 684.0 -508.90532165636273" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -473.62481833173945 L 332.15 -483.62481833173945 L 344.65 -483.62481833173945 L 344.65 -473.62481833173945 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -473.62481833173945 L 344.65 -473.62481833173945 L 338.4 -483.62481833173945 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -471.2789822059233 L 370.55 -481.2789822059233 L 383.05 -481.2789822059233 L 383.05 -471.2789822059233 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -471.2789822059233 L 383.05 -471.2789822059233 L 376.8 -481.2789822059233 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -485.7101817059121 L 408.95 -495.7101817059121 L 421.45 -495.7101817059121 L 421.45 -485.7101817059121 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -485.7101817059121 L 421.45 -485.7101817059121 L 415.2 -495.7101817059121 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -472.0692109008487 L 447.35 -482.0692109008487 L 459.85 -482.0692109008487 L 459.85 -472.0692109008487 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -472.0692109008487 L 459.85 -472.0692109008487 L 453.6 -482.0692109008487 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -502.86493670790753 L 485.75 -512.8649367079075 L 498.25 -512.8649367079075 L 498.25 -502.86493670790753 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -502.86493670790753 L 498.25 -502.86493670790753 L 492.0 -512.8649367079075 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -489.1229094030739 L 524.15 -499.1229094030739 L 536.65 -499.1229094030739 L 536.65 -489.1229094030739 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -489.1229094030739 L 536.65 -489.1229094030739 L 530.4 -499.1229094030739 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -482.8308997944231 L 562.55 -492.8308997944231 L 575.05 -492.8308997944231 L 575.05 -482.8308997944231 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -482.8308997944231 L 575.05 -482.8308997944231 L 568.8 -492.8308997944231 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -477.7200915683336 L 600.95 -487.7200915683336 L 613.45 -487.7200915683336 L 613.45 -477.7200915683336 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -477.7200915683336 L 613.45 -477.7200915683336 L 607.2 -487.7200915683336 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -515.0 L 639.35 -525.0 L 651.85 -525.0 L 651.85 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -515.0 L 651.85 -515.0 L 645.6 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -503.90532165636273 L 677.75 -513.9053216563627 L 690.25 -513.9053216563627 L 690.25 -503.90532165636273 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -503.90532165636273 L 690.25 -503.90532165636273 L 684.0 -513.9053216563627 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -508.1896428383171 L 376.8 -472.9258944102653 L 415.2 -484.19452246662195 L 453.6 -472.70887143534867 L 492.0 -494.8568115243568 L 530.4 -485.7617265450274 L 568.8 -487.8308997944231 L 607.2 -475.30817714255596 L 645.6 -505.84546337643167 L 684.0 -500.40332236421006" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -500.1896428383171 L 330.4 -516.1896428383171 L 346.4 -516.1896428383171 L 346.4 -500.1896428383171 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -508.1896428383171 M 342.4 -508.1896428383171 L 342.4 -508.19 M 342.4 -508.19 A 4 4 0 1 0 334.4 -508.19 A 4 4 0 1 0 342.4 -508.19 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -464.9258944102653 L 368.8 -480.9258944102653 L 384.8 -480.9258944102653 L 384.8 -464.9258944102653 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -472.9258944102653 M 380.8 -472.9258944102653 L 380.8 -472.926 M 380.8 -472.926 A 4 4 0 1 0 372.8 -472.926 A 4 4 0 1 0 380.8 -472.926 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -476.19452246662195 L 407.2 -492.19452246662195 L 423.2 -492.19452246662195 L 423.2 -476.19452246662195 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -484.19452246662195 M 419.2 -484.19452246662195 L 419.2 -484.195 M 419.2 -484.195 A 4 4 0 1 0 411.2 -484.195 A 4 4 0 1 0 419.2 -484.195 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -464.70887143534867 L 445.6 -480.70887143534867 L 461.6 -480.70887143534867 L 461.6 -464.70887143534867 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -472.70887143534867 M 457.6 -472.70887143534867 L 457.6 -472.709 M 457.6 -472.709 A 4 4 0 1 0 449.6 -472.709 A 4 4 0 1 0 457.6 -472.709 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -486.8568115243568 L 484.0 -502.8568115243568 L 500.0 -502.8568115243568 L 500.0 -486.8568115243568 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -494.8568115243568 M 496.0 -494.8568115243568 L 496 -494.857 M 496 -494.857 A 4 4 0 1 0 488 -494.857 A 4 4 0 1 0 496 -494.857 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -477.7617265450274 L 522.4 -493.7617265450274 L 538.4 -493.7617265450274 L 538.4 -477.7617265450274 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -485.7617265450274 M 534.4 -485.7617265450274 L 534.4 -485.762 M 534.4 -485.762 A 4 4 0 1 0 526.4 -485.762 A 4 4 0 1 0 534.4 -485.762 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -479.8308997944231 L 560.8 -495.8308997944231 L 576.8 -495.8308997944231 L 576.8 -479.8308997944231 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -487.8308997944231 M 572.8 -487.8308997944231 L 572.8 -487.831 M 572.8 -487.831 A 4 4 0 1 0 564.8 -487.831 A 4 4 0 1 0 572.8 -487.831 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -467.30817714255596 L 599.2 -483.30817714255596 L 615.2 -483.30817714255596 L 615.2 -467.30817714255596 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -475.30817714255596 M 611.2 -475.30817714255596 L 611.2 -475.308 M 611.2 -475.308 A 4 4 0 1 0 603.2 -475.308 A 4 4 0 1 0 611.2 -475.308 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -497.84546337643167 L 637.6 -513.8454633764317 L 653.6 -513.8454633764317 L 653.6 -497.84546337643167 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -505.84546337643167 M 649.6 -505.84546337643167 L 649.6 -505.845 M 649.6 -505.845 A 4 4 0 1 0 641.6 -505.845 A 4 4 0 1 0 649.6 -505.845 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -492.40332236421006 L 676.0 -508.40332236421006 L 692.0 -508.40332236421006 L 692.0 -492.40332236421006 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -500.40332236421006 M 688.0 -500.40332236421006 L 688 -500.403 M 688 -500.403 A 4 4 0 1 0 680 -500.403 A 4 4 0 1 0 688 -500.403 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -512.3925992304044 L 376.8 -468.865411116215 L 415.2 -475.4572768963154 L 453.6 -468.49266173181627 L 492.0 -487.3604072381153 L 530.4 -478.1973990376289 L 568.8 -471.4166735694331 L 607.2 -466.1584222535148 L 645.6 -496.8779415197632 L 684.0 -492.59546525900436" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -507.39259923040436 L 332.15 -517.3925992304044 L 344.65 -517.3925992304044 L 344.65 -507.39259923040436 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -507.39259923040436 L 332.15 -517.3925992304044 L 344.65 -517.3925992304044 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -463.865411116215 L 370.55 -473.865411116215 L 383.05 -473.865411116215 L 383.05 -463.865411116215 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -463.865411116215 L 370.55 -473.865411116215 L 383.05 -473.865411116215 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -470.4572768963154 L 408.95 -480.4572768963154 L 421.45 -480.4572768963154 L 421.45 -470.4572768963154 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -470.4572768963154 L 408.95 -480.4572768963154 L 421.45 -480.4572768963154 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -463.49266173181627 L 447.35 -473.49266173181627 L 459.85 -473.49266173181627 L 459.85 -463.49266173181627 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -463.49266173181627 L 447.35 -473.49266173181627 L 459.85 -473.49266173181627 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -482.3604072381153 L 485.75 -492.3604072381153 L 498.25 -492.3604072381153 L 498.25 -482.3604072381153 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -482.3604072381153 L 485.75 -492.3604072381153 L 498.25 -492.3604072381153 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -473.1973990376289 L 524.15 -483.1973990376289 L 536.65 -483.1973990376289 L 536.65 -473.1973990376289 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -473.1973990376289 L 524.15 -483.1973990376289 L 536.65 -483.1973990376289 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -466.4166735694331 L 562.55 -476.4166735694331 L 575.05 -476.4166735694331 L 575.05 -466.4166735694331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -466.4166735694331 L 562.55 -476.4166735694331 L 575.05 -476.4166735694331 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -461.1584222535148 L 600.95 -471.1584222535148 L 613.45 -471.1584222535148 L 613.45 -461.1584222535148 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -461.1584222535148 L 600.95 -471.1584222535148 L 613.45 -471.1584222535148 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -491.8779415197632 L 639.35 -501.8779415197632 L 651.85 -501.8779415197632 L 651.85 -491.8779415197632 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -491.8779415197632 L 639.35 -501.8779415197632 L 651.85 -501.8779415197632 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -487.59546525900436 L 677.75 -497.59546525900436 L 690.25 -497.59546525900436 L 690.25 -487.59546525900436 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -487.59546525900436 L 677.75 -497.59546525900436 L 690.25 -497.59546525900436 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -467.50363336521156 L 376.8 -463.89790432012774 L 415.2 -480.29142224598445 L 453.6 -461.9582821901097 L 492.0 -452.7775476855652 L 530.4 -478.1973990376289 L 568.8 -470.3580653177406 L 607.2 -462.55434987236157 L 645.6 -459.9335075340557 L 684.0 -454.0132533114453" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 333.4 -462.50363336521156 L 343.4 -472.50363336521156" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -462.50363336521156 L 333.4 -472.50363336521156" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -458.89790432012774 L 381.8 -468.89790432012774" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -458.89790432012774 L 371.8 -468.89790432012774" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -475.29142224598445 L 420.2 -485.29142224598445" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -475.29142224598445 L 410.2 -485.29142224598445" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -456.9582821901097 L 458.6 -466.9582821901097" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -456.9582821901097 L 448.6 -466.9582821901097" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -447.7775476855652 L 497.0 -457.7775476855652" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -447.7775476855652 L 487.0 -457.7775476855652" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -473.1973990376289 L 535.4 -483.1973990376289" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -473.1973990376289 L 525.4 -483.1973990376289" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -465.3580653177406 L 573.8 -475.3580653177406" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -465.3580653177406 L 563.8 -475.3580653177406" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -457.55434987236157 L 612.2 -467.55434987236157" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -457.55434987236157 L 602.2 -467.55434987236157" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -454.9335075340557 L 650.6 -464.9335075340557" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -454.9335075340557 L 640.6 -464.9335075340557" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -449.0132533114453 L 689.0 -459.0132533114453" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -449.0132533114453 L 679.0 -459.0132533114453" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip39);">
+ <path d="M 338.4 -455.9212331603877 L 376.8 -455.83574930156556 L 415.2 -463.893596993908 L 453.6 -451.16064368924003 L 492.0 -445.08284072682363 L 530.4 -467.46884342266765 L 568.8 -460.60859808580017 L 607.2 -458.9030625691845 L 645.6 -451.188309976882 L 684.0 -448.5414580148648" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip40);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 331.25714285714287 -448.77837601753055 L 331.25714285714287 -463.0640903032448 L 345.54285714285714 -463.0640903032448 L 345.54285714285714 -448.77837601753055 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -455.9212331603877 L 338.4 -463.0640903032448 L 345.54285714285714 -455.9212331603877 L 338.4 -448.77837601753055 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 369.65714285714284 -448.69289215870845 L 369.65714285714284 -462.97860644442267 L 383.9428571428571 -462.97860644442267 L 383.9428571428571 -448.69289215870845 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -455.83574930156556 L 376.8 -462.97860644442267 L 383.9428571428571 -455.83574930156556 L 376.8 -448.69289215870845 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 408.0571428571429 -456.75073985105087 L 408.0571428571429 -471.0364541367651 L 422.34285714285716 -471.0364541367651 L 422.34285714285716 -456.75073985105087 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -463.893596993908 L 415.2 -471.0364541367651 L 422.34285714285716 -463.893596993908 L 415.2 -456.75073985105087 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 446.45714285714286 -444.01778654638287 L 446.45714285714286 -458.30350083209714 L 460.74285714285713 -458.30350083209714 L 460.74285714285713 -444.01778654638287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -451.16064368924003 L 453.6 -458.30350083209714 L 460.74285714285713 -451.16064368924003 L 453.6 -444.01778654638287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 484.8571428571429 -437.9399835839665 L 484.8571428571429 -452.2256978696808 L 499.1428571428571 -452.2256978696808 L 499.1428571428571 -437.9399835839665 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -445.08284072682363 L 492.0 -452.2256978696808 L 499.1428571428571 -445.08284072682363 L 492.0 -437.9399835839665 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 523.2571428571429 -460.32598627981054 L 523.2571428571429 -474.6117005655248 L 537.5428571428572 -474.6117005655248 L 537.5428571428572 -460.32598627981054 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -467.46884342266765 L 530.4 -474.6117005655248 L 537.5428571428572 -467.46884342266765 L 530.4 -460.32598627981054 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 561.6571428571428 -453.465740942943 L 561.6571428571428 -467.7514552286573 L 575.9428571428572 -467.7514552286573 L 575.9428571428572 -453.465740942943 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -460.60859808580017 L 568.8 -467.7514552286573 L 575.9428571428572 -460.60859808580017 L 568.8 -453.465740942943 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 600.0571428571428 -451.7602054263274 L 600.0571428571428 -466.04591971204167 L 614.3428571428572 -466.04591971204167 L 614.3428571428572 -451.7602054263274 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -458.9030625691845 L 607.2 -466.04591971204167 L 614.3428571428572 -458.9030625691845 L 607.2 -451.7602054263274 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip49);">
+ <path d="M 638.4571428571428 -444.0454528340249 L 638.4571428571428 -458.3311671197391 L 652.7428571428572 -458.3311671197391 L 652.7428571428572 -444.0454528340249 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -451.188309976882 L 645.6 -458.3311671197391 L 652.7428571428572 -451.188309976882 L 645.6 -444.0454528340249 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip50);">
+ <path d="M 676.8571428571429 -441.3986008720077 L 676.8571428571429 -455.6843151577219 L 691.1428571428571 -455.6843151577219 L 691.1428571428571 -441.3986008720077 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -448.5414580148648 L 684.0 -455.6843151577219 L 691.1428571428571 -448.5414580148648 L 684.0 -441.3986008720077 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -176.66666666666669 L 314 -176.66666666666669" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 300.75 -171.66666666666669 L 300.75 -181.66666666666669 L 313.25 -181.66666666666669 L 313.25 -171.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -171.66666666666669 L 313.25 -171.66666666666669 L 307.0 -181.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-172.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -158.66666666666666 L 314 -158.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 299.0 -150.66666666666666 L 299.0 -166.66666666666666 L 315.0 -166.66666666666666 L 315.0 -150.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -158.66666666666666 M 311.0 -158.66666666666666 L 311 -158.667 M 311 -158.667 A 4 4 0 1 0 303 -158.667 A 4 4 0 1 0 311 -158.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -140.66666666666666 L 314 -140.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 300.75 -135.66666666666666 L 300.75 -145.66666666666666 L 313.25 -145.66666666666666 L 313.25 -135.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -135.66666666666666 L 300.75 -145.66666666666666 L 313.25 -145.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-136.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -122.66666666666666 L 314 -122.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -117.66666666666666 L 312.0 -127.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -117.66666666666666 L 302.0 -127.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-118.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -104.66666666666666 L 314 -104.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 299.85714285714283 -97.52380952380952 L 299.85714285714283 -111.8095238095238 L 314.14285714285717 -111.8095238095238 L 314.14285714285717 -97.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -104.66666666666666 L 307.0 -111.8095238095238 L 314.14285714285717 -104.66666666666666 L 307.0 -97.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-100.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="924pt" height="436pt" viewBox="0.00 0.00 924.00 436.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 432)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-432 921,-432 921,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="0.5,-114 0.5,-134 143.5,-134 143.5,-114 0.5,-114"/>
+<text text-anchor="middle" x="72" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::container_tag</text>
+</g>
+<!-- Node2 -->
+<g id="node3" class="node"><title>Node2</title>
+<a xlink:href="a00181.html" target="_top" xlink:title="Basic associative-container.">
+<polygon fill="white" stroke="black" points="187,-247 187,-267 337,-267 337,-247 187,-247"/>
+<text text-anchor="middle" x="262" y="-254.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::associative_tag</text>
+</a>
+</g>
+<!-- Node1->Node2 -->
+<g id="edge2" class="edge"><title>Node1->Node2</title>
+<path fill="none" stroke="midnightblue" d="M94.8477,-139.993C134.478,-167.735 214.859,-224.001 247.617,-246.932"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="96.793,-137.083 86.5935,-134.215 92.7787,-142.817 96.793,-137.083"/>
+</g>
+<!-- Node14 -->
+<g id="node27" class="node"><title>Node14</title>
+<a xlink:href="a00353.html" target="_top" xlink:title="Basic priority-queue.">
+<polygon fill="white" stroke="black" points="180,-114 180,-134 344,-134 344,-114 180,-114"/>
+<text text-anchor="middle" x="262" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::priority_queue_tag</text>
+</a>
+</g>
+<!-- Node1->Node14 -->
+<g id="edge26" class="edge"><title>Node1->Node14</title>
+<path fill="none" stroke="midnightblue" d="M153.696,-124C162.404,-124 171.265,-124 179.978,-124"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="153.56,-120.5 143.56,-124 153.56,-127.5 153.56,-120.5"/>
+</g>
+<!-- Node20 -->
+<g id="node39" class="node"><title>Node20</title>
+<a xlink:href="a00370.html" target="_top" xlink:title="Basic sequence.">
+<polygon fill="white" stroke="black" points="190,-38 190,-58 334,-58 334,-38 190,-38"/>
+<text text-anchor="middle" x="262" y="-45.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::sequence_tag</text>
+</a>
+</g>
+<!-- Node1->Node20 -->
+<g id="edge38" class="edge"><title>Node1->Node20</title>
+<path fill="none" stroke="midnightblue" d="M106.781,-110.088C144.452,-95.0192 203.618,-71.3528 236.968,-58.0129"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="105.215,-106.944 97.2305,-113.908 107.815,-113.443 105.215,-106.944"/>
+</g>
+<!-- Node3 -->
+<g id="node5" class="node"><title>Node3</title>
+<a xlink:href="a00183.html" target="_top" xlink:title="Basic branch structure.">
+<polygon fill="white" stroke="black" points="390,-304 390,-324 550,-324 550,-304 390,-304"/>
+<text text-anchor="middle" x="470" y="-311.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::basic_branch_tag</text>
+</a>
+</g>
+<!-- Node2->Node3 -->
+<g id="edge4" class="edge"><title>Node2->Node3</title>
+<path fill="none" stroke="midnightblue" d="M300.076,-270.369C323.049,-278.157 353.003,-287.824 380,-295 392.192,-298.241 405.431,-301.291 417.908,-303.959"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="300.963,-266.973 290.368,-267.049 298.698,-273.596 300.963,-266.973"/>
+</g>
+<!-- Node10 -->
+<g id="node19" class="node"><title>Node10</title>
+<a xlink:href="a00185.html" target="_top" xlink:title="Basic hash structure.">
+<polygon fill="white" stroke="black" points="395,-266 395,-286 545,-286 545,-266 395,-266"/>
+<text text-anchor="middle" x="470" y="-273.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::basic_hash_tag</text>
+</a>
+</g>
+<!-- Node2->Node10 -->
+<g id="edge18" class="edge"><title>Node2->Node10</title>
+<path fill="none" stroke="midnightblue" d="M347.308,-264.793C363.005,-266.226 379.29,-267.714 394.668,-269.119"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="347.37,-261.284 337.093,-263.859 346.733,-268.255 347.37,-261.284"/>
+</g>
+<!-- Node13 -->
+<g id="node25" class="node"><title>Node13</title>
+<a xlink:href="a00343.html" target="_top" xlink:title="List-update.">
+<polygon fill="white" stroke="black" points="395.5,-228 395.5,-248 544.5,-248 544.5,-228 395.5,-228"/>
+<text text-anchor="middle" x="470" y="-235.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::list_update_tag</text>
+</a>
+</g>
+<!-- Node2->Node13 -->
+<g id="edge24" class="edge"><title>Node2->Node13</title>
+<path fill="none" stroke="midnightblue" d="M347.436,-249.196C363.332,-247.744 379.826,-246.237 395.366,-244.818"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="346.733,-245.745 337.093,-250.141 347.37,-252.716 346.733,-245.745"/>
+</g>
+<!-- Node4 -->
+<g id="node7" class="node"><title>Node4</title>
+<a xlink:href="a00376.html" target="_top" xlink:title="Basic tree structure.">
+<polygon fill="white" stroke="black" points="606.5,-361 606.5,-381 723.5,-381 723.5,-361 606.5,-361"/>
+<text text-anchor="middle" x="665" y="-368.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::tree_tag</text>
+</a>
+</g>
+<!-- Node3->Node4 -->
+<g id="edge6" class="edge"><title>Node3->Node4</title>
+<path fill="none" stroke="midnightblue" d="M514.437,-326.989C549.695,-337.296 598.267,-351.493 630.603,-360.946"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="514.994,-323.506 504.413,-324.059 513.03,-330.224 514.994,-323.506"/>
+</g>
+<!-- Node8 -->
+<g id="node15" class="node"><title>Node8</title>
+<a xlink:href="a00381.html" target="_top" xlink:title="Basic trie structure.">
+<polygon fill="white" stroke="black" points="608.5,-304 608.5,-324 721.5,-324 721.5,-304 608.5,-304"/>
+<text text-anchor="middle" x="665" y="-311.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::trie_tag</text>
+</a>
+</g>
+<!-- Node3->Node8 -->
+<g id="edge14" class="edge"><title>Node3->Node8</title>
+<path fill="none" stroke="midnightblue" d="M560.301,-314C576.675,-314 593.321,-314 608.378,-314"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="560.158,-310.5 550.158,-314 560.158,-317.5 560.158,-310.5"/>
+</g>
+<!-- Node5 -->
+<g id="node9" class="node"><title>Node5</title>
+<a xlink:href="a00348.html" target="_top" xlink:title="Ordered-vector tree.">
+<polygon fill="white" stroke="black" points="777,-408 777,-428 909,-428 909,-408 777,-408"/>
+<text text-anchor="middle" x="843" y="-415.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::ov_tree_tag</text>
+</a>
+</g>
+<!-- Node4->Node5 -->
+<g id="edge8" class="edge"><title>Node4->Node5</title>
+<path fill="none" stroke="midnightblue" d="M712.14,-383.635C730.228,-388.466 751.067,-394.012 770,-399 781.144,-401.936 793.253,-405.099 804.346,-407.985"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="712.969,-380.234 702.404,-381.033 711.161,-386.996 712.969,-380.234"/>
+</g>
+<!-- Node6 -->
+<g id="node11" class="node"><title>Node6</title>
+<a xlink:href="a00356.html" target="_top" xlink:title="Red-black tree.">
+<polygon fill="white" stroke="black" points="777.5,-370 777.5,-390 908.5,-390 908.5,-370 777.5,-370"/>
+<text text-anchor="middle" x="843" y="-377.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::rb_tree_tag</text>
+</a>
+</g>
+<!-- Node4->Node6 -->
+<g id="edge10" class="edge"><title>Node4->Node6</title>
+<path fill="none" stroke="midnightblue" d="M733.976,-374.488C748.188,-375.206 763.117,-375.961 777.212,-376.674"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="733.941,-370.981 723.777,-373.972 733.588,-377.972 733.941,-370.981"/>
+</g>
+<!-- Node7 -->
+<g id="node13" class="node"><title>Node7</title>
+<a xlink:href="a00371.html" target="_top" xlink:title="Splay tree.">
+<polygon fill="white" stroke="black" points="770,-332 770,-352 916,-352 916,-332 770,-332"/>
+<text text-anchor="middle" x="843" y="-339.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::splay_tree_tag</text>
+</a>
+</g>
+<!-- Node4->Node7 -->
+<g id="edge12" class="edge"><title>Node4->Node7</title>
+<path fill="none" stroke="midnightblue" d="M733.937,-359.769C749.623,-357.213 766.186,-354.515 781.537,-352.014"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="733.084,-356.361 723.777,-361.424 734.21,-363.27 733.084,-356.361"/>
+</g>
+<!-- Node9 -->
+<g id="node17" class="node"><title>Node9</title>
+<a xlink:href="a00350.html" target="_top" xlink:title="PATRICIA trie.">
+<polygon fill="white" stroke="black" points="776,-294 776,-314 910,-314 910,-294 776,-294"/>
+<text text-anchor="middle" x="843" y="-301.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::pat_trie_tag</text>
+</a>
+</g>
+<!-- Node8->Node9 -->
+<g id="edge16" class="edge"><title>Node8->Node9</title>
+<path fill="none" stroke="midnightblue" d="M732.074,-310.232C746.397,-309.427 761.529,-308.577 775.855,-307.772"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="731.598,-306.753 721.81,-310.808 731.99,-313.742 731.598,-306.753"/>
+</g>
+<!-- Node11 -->
+<g id="node21" class="node"><title>Node11</title>
+<a xlink:href="a00191.html" target="_top" xlink:title="Collision-chaining hash.">
+<polygon fill="white" stroke="black" points="597,-266 597,-286 733,-286 733,-266 597,-266"/>
+<text text-anchor="middle" x="665" y="-273.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::cc_hash_tag</text>
+</a>
+</g>
+<!-- Node10->Node11 -->
+<g id="edge20" class="edge"><title>Node10->Node11</title>
+<path fill="none" stroke="midnightblue" d="M555.203,-276C569.165,-276 583.469,-276 596.944,-276"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="555.113,-272.5 545.113,-276 555.113,-279.5 555.113,-272.5"/>
+</g>
+<!-- Node12 -->
+<g id="node23" class="node"><title>Node12</title>
+<a xlink:href="a00334.html" target="_top" xlink:title="General-probing hash.">
+<polygon fill="white" stroke="black" points="596.5,-228 596.5,-248 733.5,-248 733.5,-228 596.5,-228"/>
+<text text-anchor="middle" x="665" y="-235.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::gp_hash_tag</text>
+</a>
+</g>
+<!-- Node10->Node12 -->
+<g id="edge22" class="edge"><title>Node10->Node12</title>
+<path fill="none" stroke="midnightblue" d="M531.394,-264.036C557.814,-258.887 588.354,-252.936 613.561,-248.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="530.635,-260.618 521.489,-265.966 531.974,-267.489 530.635,-260.618"/>
+</g>
+<!-- Node15 -->
+<g id="node29" class="node"><title>Node15</title>
+<a xlink:href="a00187.html" target="_top" xlink:title="Binary-heap (array-based).">
+<polygon fill="white" stroke="black" points="392.5,-190 392.5,-210 547.5,-210 547.5,-190 392.5,-190"/>
+<text text-anchor="middle" x="470" y="-197.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binary_heap_tag</text>
+</a>
+</g>
+<!-- Node14->Node15 -->
+<g id="edge28" class="edge"><title>Node14->Node15</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-139.033C311.786,-151.814 347.263,-169.822 380,-181 390.277,-184.509 401.444,-187.494 412.304,-189.987"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="289.867,-135.859 279.422,-134.079 286.477,-141.984 289.867,-135.859"/>
+</g>
+<!-- Node16 -->
+<g id="node31" class="node"><title>Node16</title>
+<a xlink:href="a00188.html" target="_top" xlink:title="Binomial-heap.">
+<polygon fill="white" stroke="black" points="387.5,-152 387.5,-172 552.5,-172 552.5,-152 387.5,-152"/>
+<text text-anchor="middle" x="470" y="-159.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node14->Node16 -->
+<g id="edge30" class="edge"><title>Node14->Node16</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-135.896C355.381,-141.06 388.126,-147.042 415.132,-151.976"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="327.388,-132.388 316.922,-134.034 326.13,-139.274 327.388,-132.388"/>
+</g>
+<!-- Node17 -->
+<g id="node33" class="node"><title>Node17</title>
+<a xlink:href="a00349.html" target="_top" xlink:title="Pairing-heap.">
+<polygon fill="white" stroke="black" points="391,-114 391,-134 549,-134 549,-114 391,-114"/>
+<text text-anchor="middle" x="470" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::pairing_heap_tag</text>
+</a>
+</g>
+<!-- Node14->Node17 -->
+<g id="edge32" class="edge"><title>Node14->Node17</title>
+<path fill="none" stroke="midnightblue" d="M354.347,-124C366.497,-124 378.861,-124 390.766,-124"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="354.207,-120.5 344.207,-124 354.207,-127.5 354.207,-120.5"/>
+</g>
+<!-- Node18 -->
+<g id="node35" class="node"><title>Node18</title>
+<a xlink:href="a00357.html" target="_top" xlink:title="Redundant-counter binomial-heap.">
+<polygon fill="white" stroke="black" points="380.5,-76 380.5,-96 559.5,-96 559.5,-76 380.5,-76"/>
+<text text-anchor="middle" x="470" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::rc_binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node14->Node18 -->
+<g id="edge34" class="edge"><title>Node14->Node18</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-112.104C355.381,-106.94 388.126,-100.958 415.132,-96.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="326.13,-108.726 316.922,-113.966 327.388,-115.612 326.13,-108.726"/>
+</g>
+<!-- Node19 -->
+<g id="node37" class="node"><title>Node19</title>
+<a xlink:href="a00373.html" target="_top" xlink:title="Thin heap.">
+<polygon fill="white" stroke="black" points="398,-38 398,-58 542,-58 542,-38 398,-38"/>
+<text text-anchor="middle" x="470" y="-45.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::thin_heap_tag</text>
+</a>
+</g>
+<!-- Node14->Node19 -->
+<g id="edge36" class="edge"><title>Node14->Node19</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-108.967C311.786,-96.1857 347.263,-78.1778 380,-67 390.277,-63.4912 401.444,-60.5058 412.304,-58.0134"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="286.477,-106.016 279.422,-113.921 289.867,-112.141 286.477,-106.016"/>
+</g>
+<!-- Node21 -->
+<g id="node41" class="node"><title>Node21</title>
+<a xlink:href="a00372.html" target="_top" xlink:title="Basic string container, inclusive of strings, ropes, etc.">
+<polygon fill="white" stroke="black" points="407.5,-0 407.5,-20 532.5,-20 532.5,-0 407.5,-0"/>
+<text text-anchor="middle" x="470" y="-7.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::string_tag</text>
+</a>
+</g>
+<!-- Node20->Node21 -->
+<g id="edge40" class="edge"><title>Node20->Node21</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-36.1041C355.381,-30.9399 388.126,-24.9578 415.132,-20.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="326.13,-32.726 316.922,-37.9662 327.388,-39.612 326.13,-32.726"/>
+</g>
+</g>
+</svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="430pt" height="204pt" viewBox="0.00 0.00 430.00 204.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 200)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-200 427,-200 427,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="136,-59 136,-79 286,-79 286,-59 136,-59"/>
+<text text-anchor="middle" x="211" y="-66.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::container_error</text>
+</g>
+<!-- Node4 -->
+<g id="node7" class="node"><title>Node4</title>
+<a xlink:href="a00339.html" target="_top" xlink:title="An entry cannot be inserted into a container object for logical reasons (not, e.g., if memory is unabvailable, in which case the allocator_type's exception will be thrown).">
+<polygon fill="white" stroke="black" points="0,-1 0,-21 132,-21 132,-1 0,-1"/>
+<text text-anchor="middle" x="66" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::insert_error</text>
+</a>
+</g>
+<!-- Node1->Node4 -->
+<g id="edge6" class="edge"><title>Node1->Node4</title>
+<path fill="none" stroke="midnightblue" d="M176.225,-55.0898C150.121,-44.6486 114.974,-30.5898 91.4542,-21.1817"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="175.158,-58.4329 185.743,-58.8972 177.758,-51.9335 175.158,-58.4329"/>
+</g>
+<!-- Node5 -->
+<g id="node9" class="node"><title>Node5</title>
+<a xlink:href="a00340.html" target="_top" xlink:title="A join cannot be performed logical reasons (i.e., the ranges of the two container objects being joine...">
+<polygon fill="white" stroke="black" points="150,-1 150,-21 272,-21 272,-1 150,-1"/>
+<text text-anchor="middle" x="211" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::join_error</text>
+</a>
+</g>
+<!-- Node1->Node5 -->
+<g id="edge8" class="edge"><title>Node1->Node5</title>
+<path fill="none" stroke="midnightblue" d="M211,-48.8902C211,-39.6201 211,-29.0083 211,-21.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="207.5,-48.8971 211,-58.8972 214.5,-48.8972 207.5,-48.8971"/>
+</g>
+<!-- Node6 -->
+<g id="node11" class="node"><title>Node6</title>
+<a xlink:href="a00358.html" target="_top" xlink:title="A container cannot be resized.">
+<polygon fill="white" stroke="black" points="290,-1 290,-21 422,-21 422,-1 290,-1"/>
+<text text-anchor="middle" x="356" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::resize_error</text>
+</a>
+</g>
+<!-- Node1->Node6 -->
+<g id="edge10" class="edge"><title>Node1->Node6</title>
+<path fill="none" stroke="midnightblue" d="M245.775,-55.0898C271.879,-44.6486 307.026,-30.5898 330.546,-21.1817"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="244.242,-51.9335 236.257,-58.8972 246.842,-58.4329 244.242,-51.9335"/>
+</g>
+<!-- Node2 -->
+<g id="node2" class="node"><title>Node2</title>
+<a xlink:href="a00771.html" target="_top" xlink:title="One of two subclasses of exception.">
+<polygon fill="white" stroke="black" points="167.5,-117 167.5,-137 254.5,-137 254.5,-117 167.5,-117"/>
+<text text-anchor="middle" x="211" y="-124.9" font-family="FreeSans" font-size="9.00">std::logic_error</text>
+</a>
+</g>
+<!-- Node2->Node1 -->
+<g id="edge2" class="edge"><title>Node2->Node1</title>
+<path fill="none" stroke="midnightblue" d="M211,-106.89C211,-97.6201 211,-87.0083 211,-79.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="207.5,-106.897 211,-116.897 214.5,-106.897 207.5,-106.897"/>
+</g>
+<!-- Node3 -->
+<g id="node4" class="node"><title>Node3</title>
+<a xlink:href="a00647.html" target="_top" xlink:title="Base class for all library exceptions.">
+<polygon fill="white" stroke="black" points="169.5,-175 169.5,-195 252.5,-195 252.5,-175 169.5,-175"/>
+<text text-anchor="middle" x="211" y="-182.9" font-family="FreeSans" font-size="9.00">std::exception</text>
+</a>
+</g>
+<!-- Node3->Node2 -->
+<g id="edge4" class="edge"><title>Node3->Node2</title>
+<path fill="none" stroke="midnightblue" d="M211,-164.89C211,-155.62 211,-145.008 211,-137.378"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="207.5,-164.897 211,-174.897 214.5,-164.897 207.5,-164.897"/>
+</g>
+</g>
+</svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 332.15 -510.7894563318057 L 344.65 -510.7894563318057 L 338.4 -520.7894563318057 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 370.55 -504.6858000065939 L 383.05 -504.6858000065939 L 376.8 -514.6858000065939 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 408.95 -474.7949292802743 L 421.45 -474.7949292802743 L 415.2 -484.7949292802743 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 447.35 -504.6858000065939 L 459.85 -504.6858000065939 L 453.6 -514.6858000065939 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 485.75 -472.9286538524941 L 498.25 -472.9286538524941 L 492.0 -482.9286538524941 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 524.15 -488.7154726187729 L 536.65 -488.7154726187729 L 530.4 -498.7154726187729 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 562.55 -503.31347466288616 L 575.05 -503.31347466288616 L 568.8 -513.3134746628862 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 600.95 -515.0 L 613.45 -515.0 L 607.2 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 639.35 -467.025914081303 L 651.85 -467.025914081303 L 645.6 -477.025914081303 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 677.75 -471.52658995746924 L 690.25 -471.52658995746924 L 684.0 -481.52658995746924 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -427.19831195806273 M 342.4 -427.19831195806273 L 342.4 -427.198 M 342.4 -427.198 A 4 4 0 1 0 334.4 -427.198 A 4 4 0 1 0 342.4 -427.198 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -423.666677656523 M 380.8 -423.666677656523 L 380.8 -423.667 M 380.8 -423.667 A 4 4 0 1 0 372.8 -423.667 A 4 4 0 1 0 380.8 -423.667 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -419.5119844383634 M 419.2 -419.5119844383634 L 419.2 -419.512 M 419.2 -419.512 A 4 4 0 1 0 411.2 -419.512 A 4 4 0 1 0 419.2 -419.512 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -426.89584913125185 M 457.6 -426.89584913125185 L 457.6 -426.896 M 457.6 -426.896 A 4 4 0 1 0 449.6 -426.896 A 4 4 0 1 0 457.6 -426.896 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -425.5909795258976 M 496.0 -425.5909795258976 L 496 -425.591 M 496 -425.591 A 4 4 0 1 0 488 -425.591 A 4 4 0 1 0 496 -425.591 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -426.4650028024134 M 534.4 -426.4650028024134 L 534.4 -426.465 M 534.4 -426.465 A 4 4 0 1 0 526.4 -426.465 A 4 4 0 1 0 534.4 -426.465 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -431.3544558372622 M 572.8 -431.3544558372622 L 572.8 -431.354 M 572.8 -431.354 A 4 4 0 1 0 564.8 -431.354 A 4 4 0 1 0 572.8 -431.354 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -431.1267020540041 M 611.2 -431.1267020540041 L 611.2 -431.127 M 611.2 -431.127 A 4 4 0 1 0 603.2 -431.127 A 4 4 0 1 0 611.2 -431.127 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -431.0440143747321 M 649.6 -431.0440143747321 L 649.6 -431.044 M 649.6 -431.044 A 4 4 0 1 0 641.6 -431.044 A 4 4 0 1 0 649.6 -431.044 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -430.6900530810062 M 688.0 -430.6900530810062 L 688 -430.69 M 688 -430.69 A 4 4 0 1 0 680 -430.69 A 4 4 0 1 0 688 -430.69 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 300.75 -175.66666666666669 L 313.25 -175.66666666666669 L 307.0 -185.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 6.07e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.21e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.82e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 2.43e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 3.03e-08
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -515.7894563318057 L 376.8 -509.6858000065939 L 415.2 -479.7949292802743 L 453.6 -509.6858000065939 L 492.0 -477.9286538524941 L 530.4 -493.7154726187729 L 568.8 -508.31347466288616 L 607.2 -520.0 L 645.6 -472.025914081303 L 684.0 -476.52658995746924" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -510.7894563318057 L 332.15 -520.7894563318057 L 344.65 -520.7894563318057 L 344.65 -510.7894563318057 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -510.7894563318057 L 344.65 -510.7894563318057 L 338.4 -520.7894563318057 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -504.6858000065939 L 370.55 -514.6858000065939 L 383.05 -514.6858000065939 L 383.05 -504.6858000065939 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -504.6858000065939 L 383.05 -504.6858000065939 L 376.8 -514.6858000065939 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -474.7949292802743 L 408.95 -484.7949292802743 L 421.45 -484.7949292802743 L 421.45 -474.7949292802743 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -474.7949292802743 L 421.45 -474.7949292802743 L 415.2 -484.7949292802743 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -504.6858000065939 L 447.35 -514.6858000065939 L 459.85 -514.6858000065939 L 459.85 -504.6858000065939 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -504.6858000065939 L 459.85 -504.6858000065939 L 453.6 -514.6858000065939 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -472.9286538524941 L 485.75 -482.9286538524941 L 498.25 -482.9286538524941 L 498.25 -472.9286538524941 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -472.9286538524941 L 498.25 -472.9286538524941 L 492.0 -482.9286538524941 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -488.7154726187729 L 524.15 -498.7154726187729 L 536.65 -498.7154726187729 L 536.65 -488.7154726187729 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -488.7154726187729 L 536.65 -488.7154726187729 L 530.4 -498.7154726187729 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -503.31347466288616 L 562.55 -513.3134746628862 L 575.05 -513.3134746628862 L 575.05 -503.31347466288616 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -503.31347466288616 L 575.05 -503.31347466288616 L 568.8 -513.3134746628862 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -515.0 L 600.95 -525.0 L 613.45 -525.0 L 613.45 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -515.0 L 613.45 -515.0 L 607.2 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -467.025914081303 L 639.35 -477.025914081303 L 651.85 -477.025914081303 L 651.85 -467.025914081303 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -467.025914081303 L 651.85 -467.025914081303 L 645.6 -477.025914081303 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -471.52658995746924 L 677.75 -481.52658995746924 L 690.25 -481.52658995746924 L 690.25 -471.52658995746924 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -471.52658995746924 L 690.25 -471.52658995746924 L 684.0 -481.52658995746924 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -427.19831195806273 L 376.8 -423.666677656523 L 415.2 -419.5119844383634 L 453.6 -426.89584913125185 L 492.0 -425.5909795258976 L 530.4 -426.4650028024134 L 568.8 -431.3544558372622 L 607.2 -431.1267020540041 L 645.6 -431.0440143747321 L 684.0 -430.6900530810062" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -419.19831195806273 L 330.4 -435.19831195806273 L 346.4 -435.19831195806273 L 346.4 -419.19831195806273 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -427.19831195806273 M 342.4 -427.19831195806273 L 342.4 -427.198 M 342.4 -427.198 A 4 4 0 1 0 334.4 -427.198 A 4 4 0 1 0 342.4 -427.198 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -415.666677656523 L 368.8 -431.666677656523 L 384.8 -431.666677656523 L 384.8 -415.666677656523 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -423.666677656523 M 380.8 -423.666677656523 L 380.8 -423.667 M 380.8 -423.667 A 4 4 0 1 0 372.8 -423.667 A 4 4 0 1 0 380.8 -423.667 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -411.5119844383634 L 407.2 -427.5119844383634 L 423.2 -427.5119844383634 L 423.2 -411.5119844383634 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -419.5119844383634 M 419.2 -419.5119844383634 L 419.2 -419.512 M 419.2 -419.512 A 4 4 0 1 0 411.2 -419.512 A 4 4 0 1 0 419.2 -419.512 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -418.89584913125185 L 445.6 -434.89584913125185 L 461.6 -434.89584913125185 L 461.6 -418.89584913125185 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -426.89584913125185 M 457.6 -426.89584913125185 L 457.6 -426.896 M 457.6 -426.896 A 4 4 0 1 0 449.6 -426.896 A 4 4 0 1 0 457.6 -426.896 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -417.5909795258976 L 484.0 -433.5909795258976 L 500.0 -433.5909795258976 L 500.0 -417.5909795258976 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -425.5909795258976 M 496.0 -425.5909795258976 L 496 -425.591 M 496 -425.591 A 4 4 0 1 0 488 -425.591 A 4 4 0 1 0 496 -425.591 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -418.4650028024134 L 522.4 -434.4650028024134 L 538.4 -434.4650028024134 L 538.4 -418.4650028024134 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -426.4650028024134 M 534.4 -426.4650028024134 L 534.4 -426.465 M 534.4 -426.465 A 4 4 0 1 0 526.4 -426.465 A 4 4 0 1 0 534.4 -426.465 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -423.3544558372622 L 560.8 -439.3544558372622 L 576.8 -439.3544558372622 L 576.8 -423.3544558372622 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -431.3544558372622 M 572.8 -431.3544558372622 L 572.8 -431.354 M 572.8 -431.354 A 4 4 0 1 0 564.8 -431.354 A 4 4 0 1 0 572.8 -431.354 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -423.1267020540041 L 599.2 -439.1267020540041 L 615.2 -439.1267020540041 L 615.2 -423.1267020540041 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -431.1267020540041 M 611.2 -431.1267020540041 L 611.2 -431.127 M 611.2 -431.127 A 4 4 0 1 0 603.2 -431.127 A 4 4 0 1 0 611.2 -431.127 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -423.0440143747321 L 637.6 -439.0440143747321 L 653.6 -439.0440143747321 L 653.6 -423.0440143747321 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -431.0440143747321 M 649.6 -431.0440143747321 L 649.6 -431.044 M 649.6 -431.044 A 4 4 0 1 0 641.6 -431.044 A 4 4 0 1 0 649.6 -431.044 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -422.6900530810062 L 676.0 -438.6900530810062 L 692.0 -438.6900530810062 L 692.0 -422.6900530810062 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -430.6900530810062 M 688.0 -430.6900530810062 L 688 -430.69 M 688 -430.69 A 4 4 0 1 0 680 -430.69 A 4 4 0 1 0 688 -430.69 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -358.46134977415846 L 376.8 -360.1617421120306 L 415.2 -350.4975107975339 L 453.6 -359.8586264877518 L 492.0 -369.2490455309749 L 530.4 -352.2271339553592 L 568.8 -360.01283175628896 L 607.2 -362.97638719461935 L 645.6 -369.0183904256371 L 684.0 -375.6323893046718" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 333.4 -353.46134977415846 L 343.4 -363.46134977415846" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -353.46134977415846 L 333.4 -363.46134977415846" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -355.1617421120306 L 381.8 -365.1617421120306" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -355.1617421120306 L 371.8 -365.1617421120306" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -345.4975107975339 L 420.2 -355.4975107975339" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -345.4975107975339 L 410.2 -355.4975107975339" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -354.8586264877518 L 458.6 -364.8586264877518" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -354.8586264877518 L 448.6 -364.8586264877518" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -364.2490455309749 L 497.0 -374.2490455309749" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -364.2490455309749 L 487.0 -374.2490455309749" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -347.2271339553592 L 535.4 -357.2271339553592" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -347.2271339553592 L 525.4 -357.2271339553592" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -355.01283175628896 L 573.8 -365.01283175628896" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -355.01283175628896 L 563.8 -365.01283175628896" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -357.97638719461935 L 612.2 -367.97638719461935" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -357.97638719461935 L 602.2 -367.97638719461935" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -364.0183904256371 L 650.6 -374.0183904256371" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -364.0183904256371 L 640.6 -374.0183904256371" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -370.6323893046718 L 689.0 -380.6323893046718" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -370.6323893046718 L 679.0 -380.6323893046718" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -180.66666666666669 L 314 -180.66666666666669" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 300.75 -175.66666666666669 L 300.75 -185.66666666666669 L 313.25 -185.66666666666669 L 313.25 -175.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -175.66666666666669 L 313.25 -175.66666666666669 L 307.0 -185.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-176.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -162.66666666666666 L 314 -162.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 299.0 -154.66666666666666 L 299.0 -170.66666666666666 L 315.0 -170.66666666666666 L 315.0 -154.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -139.66666666666666 L 312.0 -149.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -139.66666666666666 L 302.0 -149.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 332.15 -490.97006552866367 L 344.65 -490.97006552866367 L 338.4 -500.97006552866367 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 370.55 -488.57217397844545 L 383.05 -488.57217397844545 L 376.8 -498.57217397844545 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 408.95 -475.82156836322497 L 421.45 -475.82156836322497 L 415.2 -485.82156836322497 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 447.35 -496.25949162793756 L 459.85 -496.25949162793756 L 453.6 -506.25949162793756 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 485.75 -464.12581440753127 L 498.25 -464.12581440753127 L 492.0 -474.12581440753127 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 524.15 -472.3791668364165 L 536.65 -472.3791668364165 L 530.4 -482.3791668364165 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 562.55 -481.68461314271207 L 575.05 -481.68461314271207 L 568.8 -491.68461314271207 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 600.95 -495.53971049555463 L 613.45 -495.53971049555463 L 607.2 -505.53971049555463 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 639.35 -494.5627661808165 L 651.85 -494.5627661808165 L 645.6 -504.5627661808165 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 677.75 -515.0 L 690.25 -515.0 L 684.0 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -407.71759057590634 M 342.4 -407.71759057590634 L 342.4 -407.718 M 342.4 -407.718 A 4 4 0 1 0 334.4 -407.718 A 4 4 0 1 0 342.4 -407.718 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -414.10737173962775 M 380.8 -414.10737173962775 L 380.8 -414.107 M 380.8 -414.107 A 4 4 0 1 0 372.8 -414.107 A 4 4 0 1 0 380.8 -414.107 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -408.428408916411 M 419.2 -408.428408916411 L 419.2 -408.428 M 419.2 -408.428 A 4 4 0 1 0 411.2 -408.428 A 4 4 0 1 0 419.2 -408.428 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -413.90536419960074 M 457.6 -413.90536419960074 L 457.6 -413.905 M 457.6 -413.905 A 4 4 0 1 0 449.6 -413.905 A 4 4 0 1 0 457.6 -413.905 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -422.3703764059204 M 496.0 -422.3703764059204 L 496 -422.37 M 496 -422.37 A 4 4 0 1 0 488 -422.37 A 4 4 0 1 0 496 -422.37 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -415.6827547736268 M 534.4 -415.6827547736268 L 534.4 -415.683 M 534.4 -415.683 A 4 4 0 1 0 526.4 -415.683 A 4 4 0 1 0 534.4 -415.683 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -415.5310767572243 M 572.8 -415.5310767572243 L 572.8 -415.531 M 572.8 -415.531 A 4 4 0 1 0 564.8 -415.531 A 4 4 0 1 0 572.8 -415.531 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -423.0005296195201 M 611.2 -423.0005296195201 L 611.2 -423.001 M 611.2 -423.001 A 4 4 0 1 0 603.2 -423.001 A 4 4 0 1 0 611.2 -423.001 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -417.433946417547 M 649.6 -417.433946417547 L 649.6 -417.434 M 649.6 -417.434 A 4 4 0 1 0 641.6 -417.434 A 4 4 0 1 0 649.6 -417.434 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -418.55153762022206 M 688.0 -418.55153762022206 L 688 -418.552 M 688 -418.552 A 4 4 0 1 0 680 -418.552 A 4 4 0 1 0 688 -418.552 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 300.75 -175.66666666666669 L 313.25 -175.66666666666669 L 307.0 -185.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 6.38e-09
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.28e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.91e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 2.55e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 3.19e-08
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -495.97006552866367 L 376.8 -493.57217397844545 L 415.2 -480.82156836322497 L 453.6 -501.25949162793756 L 492.0 -469.12581440753127 L 530.4 -477.3791668364165 L 568.8 -486.68461314271207 L 607.2 -500.53971049555463 L 645.6 -499.5627661808165 L 684.0 -520.0" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -490.97006552866367 L 332.15 -500.97006552866367 L 344.65 -500.97006552866367 L 344.65 -490.97006552866367 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -490.97006552866367 L 344.65 -490.97006552866367 L 338.4 -500.97006552866367 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -488.57217397844545 L 370.55 -498.57217397844545 L 383.05 -498.57217397844545 L 383.05 -488.57217397844545 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -488.57217397844545 L 383.05 -488.57217397844545 L 376.8 -498.57217397844545 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -475.82156836322497 L 408.95 -485.82156836322497 L 421.45 -485.82156836322497 L 421.45 -475.82156836322497 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -475.82156836322497 L 421.45 -475.82156836322497 L 415.2 -485.82156836322497 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -496.25949162793756 L 447.35 -506.25949162793756 L 459.85 -506.25949162793756 L 459.85 -496.25949162793756 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -496.25949162793756 L 459.85 -496.25949162793756 L 453.6 -506.25949162793756 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -464.12581440753127 L 485.75 -474.12581440753127 L 498.25 -474.12581440753127 L 498.25 -464.12581440753127 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -464.12581440753127 L 498.25 -464.12581440753127 L 492.0 -474.12581440753127 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -472.3791668364165 L 524.15 -482.3791668364165 L 536.65 -482.3791668364165 L 536.65 -472.3791668364165 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -472.3791668364165 L 536.65 -472.3791668364165 L 530.4 -482.3791668364165 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -481.68461314271207 L 562.55 -491.68461314271207 L 575.05 -491.68461314271207 L 575.05 -481.68461314271207 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -481.68461314271207 L 575.05 -481.68461314271207 L 568.8 -491.68461314271207 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -495.53971049555463 L 600.95 -505.53971049555463 L 613.45 -505.53971049555463 L 613.45 -495.53971049555463 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -495.53971049555463 L 613.45 -495.53971049555463 L 607.2 -505.53971049555463 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -494.5627661808165 L 639.35 -504.5627661808165 L 651.85 -504.5627661808165 L 651.85 -494.5627661808165 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -494.5627661808165 L 651.85 -494.5627661808165 L 645.6 -504.5627661808165 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -515.0 L 690.25 -515.0 L 684.0 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -407.71759057590634 L 376.8 -414.10737173962775 L 415.2 -408.428408916411 L 453.6 -413.90536419960074 L 492.0 -422.3703764059204 L 530.4 -415.6827547736268 L 568.8 -415.5310767572243 L 607.2 -423.0005296195201 L 645.6 -417.433946417547 L 684.0 -418.55153762022206" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -399.71759057590634 L 330.4 -415.71759057590634 L 346.4 -415.71759057590634 L 346.4 -399.71759057590634 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -407.71759057590634 M 342.4 -407.71759057590634 L 342.4 -407.718 M 342.4 -407.718 A 4 4 0 1 0 334.4 -407.718 A 4 4 0 1 0 342.4 -407.718 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -406.10737173962775 L 368.8 -422.10737173962775 L 384.8 -422.10737173962775 L 384.8 -406.10737173962775 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -414.10737173962775 M 380.8 -414.10737173962775 L 380.8 -414.107 M 380.8 -414.107 A 4 4 0 1 0 372.8 -414.107 A 4 4 0 1 0 380.8 -414.107 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -400.428408916411 L 407.2 -416.428408916411 L 423.2 -416.428408916411 L 423.2 -400.428408916411 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -408.428408916411 M 419.2 -408.428408916411 L 419.2 -408.428 M 419.2 -408.428 A 4 4 0 1 0 411.2 -408.428 A 4 4 0 1 0 419.2 -408.428 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -405.90536419960074 L 445.6 -421.90536419960074 L 461.6 -421.90536419960074 L 461.6 -405.90536419960074 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -413.90536419960074 M 457.6 -413.90536419960074 L 457.6 -413.905 M 457.6 -413.905 A 4 4 0 1 0 449.6 -413.905 A 4 4 0 1 0 457.6 -413.905 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -414.3703764059204 L 484.0 -430.3703764059204 L 500.0 -430.3703764059204 L 500.0 -414.3703764059204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -422.3703764059204 M 496.0 -422.3703764059204 L 496 -422.37 M 496 -422.37 A 4 4 0 1 0 488 -422.37 A 4 4 0 1 0 496 -422.37 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -407.6827547736268 L 522.4 -423.6827547736268 L 538.4 -423.6827547736268 L 538.4 -407.6827547736268 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -415.6827547736268 M 534.4 -415.6827547736268 L 534.4 -415.683 M 534.4 -415.683 A 4 4 0 1 0 526.4 -415.683 A 4 4 0 1 0 534.4 -415.683 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -407.5310767572243 L 560.8 -423.5310767572243 L 576.8 -423.5310767572243 L 576.8 -407.5310767572243 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -415.5310767572243 M 572.8 -415.5310767572243 L 572.8 -415.531 M 572.8 -415.531 A 4 4 0 1 0 564.8 -415.531 A 4 4 0 1 0 572.8 -415.531 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -415.0005296195201 L 599.2 -431.0005296195201 L 615.2 -431.0005296195201 L 615.2 -415.0005296195201 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -423.0005296195201 M 611.2 -423.0005296195201 L 611.2 -423.001 M 611.2 -423.001 A 4 4 0 1 0 603.2 -423.001 A 4 4 0 1 0 611.2 -423.001 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -409.433946417547 L 637.6 -425.433946417547 L 653.6 -425.433946417547 L 653.6 -409.433946417547 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -417.433946417547 M 649.6 -417.433946417547 L 649.6 -417.434 M 649.6 -417.434 A 4 4 0 1 0 641.6 -417.434 A 4 4 0 1 0 649.6 -417.434 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -410.55153762022206 L 676.0 -426.55153762022206 L 692.0 -426.55153762022206 L 692.0 -410.55153762022206 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -418.55153762022206 M 688.0 -418.55153762022206 L 688 -418.552 M 688 -418.552 A 4 4 0 1 0 680 -418.552 A 4 4 0 1 0 688 -418.552 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -337.7244599604509 L 376.8 -348.9684892054767 L 415.2 -344.8536025095817 L 453.6 -354.35036995020323 L 492.0 -364.3227169167996 L 530.4 -349.681858494439 L 568.8 -356.56617893618557 L 607.2 -360.7800700100596 L 645.6 -363.37686659542396 L 684.0 -368.84113608087824" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 333.4 -332.7244599604509 L 343.4 -342.7244599604509" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -332.7244599604509 L 333.4 -342.7244599604509" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -343.9684892054767 L 381.8 -353.9684892054767" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -343.9684892054767 L 371.8 -353.9684892054767" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -339.8536025095817 L 420.2 -349.8536025095817" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -339.8536025095817 L 410.2 -349.8536025095817" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -349.35036995020323 L 458.6 -359.35036995020323" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -349.35036995020323 L 448.6 -359.35036995020323" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -359.3227169167996 L 497.0 -369.3227169167996" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -359.3227169167996 L 487.0 -369.3227169167996" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -344.681858494439 L 535.4 -354.681858494439" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -344.681858494439 L 525.4 -354.681858494439" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -351.56617893618557 L 573.8 -361.56617893618557" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -351.56617893618557 L 563.8 -361.56617893618557" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -355.7800700100596 L 612.2 -365.7800700100596" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -355.7800700100596 L 602.2 -365.7800700100596" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -358.37686659542396 L 650.6 -368.37686659542396" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -358.37686659542396 L 640.6 -368.37686659542396" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -363.84113608087824 L 689.0 -373.84113608087824" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -363.84113608087824 L 679.0 -373.84113608087824" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -180.66666666666669 L 314 -180.66666666666669" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 300.75 -175.66666666666669 L 300.75 -185.66666666666669 L 313.25 -185.66666666666669 L 313.25 -175.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -175.66666666666669 L 313.25 -175.66666666666669 L 307.0 -185.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-176.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -162.66666666666666 L 314 -162.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 299.0 -154.66666666666666 L 299.0 -170.66666666666666 L 315.0 -170.66666666666666 L 315.0 -154.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -139.66666666666666 L 312.0 -149.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -139.66666666666666 L 302.0 -149.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -482.3197045634397 M 342.4 -482.3197045634397 L 342.4 -482.32 M 342.4 -482.32 A 4 4 0 1 0 334.4 -482.32 A 4 4 0 1 0 342.4 -482.32 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -451.43787918754947 M 380.8 -451.43787918754947 L 380.8 -451.438 M 380.8 -451.438 A 4 4 0 1 0 372.8 -451.438 A 4 4 0 1 0 380.8 -451.438 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -461.3062516486415 M 419.2 -461.3062516486415 L 419.2 -461.306 M 419.2 -461.306 A 4 4 0 1 0 411.2 -461.306 A 4 4 0 1 0 419.2 -461.306 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -451.24782379319436 M 457.6 -451.24782379319436 L 457.6 -451.248 M 457.6 -451.248 A 4 4 0 1 0 449.6 -451.248 A 4 4 0 1 0 457.6 -451.248 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -470.6436296491691 M 496.0 -470.6436296491691 L 496 -470.644 M 496 -470.644 A 4 4 0 1 0 488 -470.644 A 4 4 0 1 0 496 -470.644 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -462.67871274070166 M 534.4 -462.67871274070166 L 534.4 -462.679 M 534.4 -462.679 A 4 4 0 1 0 526.4 -462.679 A 4 4 0 1 0 534.4 -462.679 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -464.4907676074914 M 572.8 -464.4907676074914 L 572.8 -464.491 M 572.8 -464.491 A 4 4 0 1 0 564.8 -464.491 A 4 4 0 1 0 572.8 -464.491 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -453.52413611184386 M 611.2 -453.52413611184386 L 611.2 -453.524 M 611.2 -453.524 A 4 4 0 1 0 603.2 -453.524 A 4 4 0 1 0 611.2 -453.524 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -480.26681614349775 M 649.6 -480.26681614349775 L 649.6 -480.267 M 649.6 -480.267 A 4 4 0 1 0 641.6 -480.267 A 4 4 0 1 0 649.6 -480.267 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -475.5009232392509 M 688.0 -475.5009232392509 L 688 -475.501 M 688 -475.501 A 4 4 0 1 0 680 -475.501 A 4 4 0 1 0 688 -475.501 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 332.15 -406.4568979161171 L 344.65 -406.4568979161171 L 338.4 -416.4568979161171 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 370.55 -416.09502769717756 L 383.05 -416.09502769717756 L 376.8 -426.09502769717756 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.95 -437.40937747296226 L 421.45 -437.40937747296226 L 415.2 -447.40937747296226 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 447.35 -419.81343972566606 L 459.85 -419.81343972566606 L 453.6 -429.81343972566606 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 485.75 -485.7590345555262 L 498.25 -485.7590345555262 L 492.0 -495.7590345555262 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 524.15 -464.65708256396726 L 536.65 -464.65708256396726 L 530.4 -474.65708256396726 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 562.55 -450.18095489316806 L 575.05 -450.18095489316806 L 568.8 -460.18095489316806 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.95 -440.2313373780005 L 613.45 -440.2313373780005 L 607.2 -450.2313373780005 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 639.35 -515.0 L 651.85 -515.0 L 645.6 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 677.75 -499.11804273278824 L 690.25 -499.11804273278824 L 684.0 -509.11804273278824 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 307.0 -180.66666666666669 M 311.0 -180.66666666666669 L 311 -180.667 M 311 -180.667 A 4 4 0 1 0 303 -180.667 A 4 4 0 1 0 311 -180.667 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 300.75 -157.66666666666666 L 313.25 -157.66666666666666 L 307.0 -167.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 3.03e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 6.07e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 9.10e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.21e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 1.52e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -482.3197045634397 L 376.8 -451.43787918754947 L 415.2 -461.3062516486415 L 453.6 -451.24782379319436 L 492.0 -470.6436296491691 L 530.4 -462.67871274070166 L 568.8 -464.4907676074914 L 607.2 -453.52413611184386 L 645.6 -480.26681614349775 L 684.0 -475.5009232392509" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -474.3197045634397 L 330.4 -490.3197045634397 L 346.4 -490.3197045634397 L 346.4 -474.3197045634397 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -482.3197045634397 M 342.4 -482.3197045634397 L 342.4 -482.32 M 342.4 -482.32 A 4 4 0 1 0 334.4 -482.32 A 4 4 0 1 0 342.4 -482.32 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -443.43787918754947 L 368.8 -459.43787918754947 L 384.8 -459.43787918754947 L 384.8 -443.43787918754947 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -451.43787918754947 M 380.8 -451.43787918754947 L 380.8 -451.438 M 380.8 -451.438 A 4 4 0 1 0 372.8 -451.438 A 4 4 0 1 0 380.8 -451.438 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -453.3062516486415 L 407.2 -469.3062516486415 L 423.2 -469.3062516486415 L 423.2 -453.3062516486415 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -461.3062516486415 M 419.2 -461.3062516486415 L 419.2 -461.306 M 419.2 -461.306 A 4 4 0 1 0 411.2 -461.306 A 4 4 0 1 0 419.2 -461.306 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -443.24782379319436 L 445.6 -459.24782379319436 L 461.6 -459.24782379319436 L 461.6 -443.24782379319436 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -451.24782379319436 M 457.6 -451.24782379319436 L 457.6 -451.248 M 457.6 -451.248 A 4 4 0 1 0 449.6 -451.248 A 4 4 0 1 0 457.6 -451.248 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -462.6436296491691 L 484.0 -478.6436296491691 L 500.0 -478.6436296491691 L 500.0 -462.6436296491691 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -470.6436296491691 M 496.0 -470.6436296491691 L 496 -470.644 M 496 -470.644 A 4 4 0 1 0 488 -470.644 A 4 4 0 1 0 496 -470.644 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -454.67871274070166 L 522.4 -470.67871274070166 L 538.4 -470.67871274070166 L 538.4 -454.67871274070166 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -462.67871274070166 M 534.4 -462.67871274070166 L 534.4 -462.679 M 534.4 -462.679 A 4 4 0 1 0 526.4 -462.679 A 4 4 0 1 0 534.4 -462.679 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -456.4907676074914 L 560.8 -472.4907676074914 L 576.8 -472.4907676074914 L 576.8 -456.4907676074914 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -464.4907676074914 M 572.8 -464.4907676074914 L 572.8 -464.491 M 572.8 -464.491 A 4 4 0 1 0 564.8 -464.491 A 4 4 0 1 0 572.8 -464.491 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -445.52413611184386 L 599.2 -461.52413611184386 L 615.2 -461.52413611184386 L 615.2 -445.52413611184386 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -453.52413611184386 M 611.2 -453.52413611184386 L 611.2 -453.524 M 611.2 -453.524 A 4 4 0 1 0 603.2 -453.524 A 4 4 0 1 0 611.2 -453.524 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -472.26681614349775 L 637.6 -488.26681614349775 L 653.6 -488.26681614349775 L 653.6 -472.26681614349775 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -480.26681614349775 M 649.6 -480.26681614349775 L 649.6 -480.267 M 649.6 -480.267 A 4 4 0 1 0 641.6 -480.267 A 4 4 0 1 0 649.6 -480.267 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -467.5009232392509 L 676.0 -483.5009232392509 L 692.0 -483.5009232392509 L 692.0 -467.5009232392509 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -475.5009232392509 M 688.0 -475.5009232392509 L 688 -475.501 M 688 -475.501 A 4 4 0 1 0 680 -475.501 A 4 4 0 1 0 688 -475.501 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -411.4568979161171 L 376.8 -421.09502769717756 L 415.2 -442.40937747296226 L 453.6 -424.81343972566606 L 492.0 -490.7590345555262 L 530.4 -469.65708256396726 L 568.8 -455.18095489316806 L 607.2 -445.2313373780005 L 645.6 -520.0 L 684.0 -504.11804273278824" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 332.15 -406.4568979161171 L 332.15 -416.4568979161171 L 344.65 -416.4568979161171 L 344.65 -406.4568979161171 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -406.4568979161171 L 344.65 -406.4568979161171 L 338.4 -416.4568979161171 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 370.55 -416.09502769717756 L 370.55 -426.09502769717756 L 383.05 -426.09502769717756 L 383.05 -416.09502769717756 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -416.09502769717756 L 383.05 -416.09502769717756 L 376.8 -426.09502769717756 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.95 -437.40937747296226 L 408.95 -447.40937747296226 L 421.45 -447.40937747296226 L 421.45 -437.40937747296226 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -437.40937747296226 L 421.45 -437.40937747296226 L 415.2 -447.40937747296226 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.35 -419.81343972566606 L 447.35 -429.81343972566606 L 459.85 -429.81343972566606 L 459.85 -419.81343972566606 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -419.81343972566606 L 459.85 -419.81343972566606 L 453.6 -429.81343972566606 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 485.75 -485.7590345555262 L 485.75 -495.7590345555262 L 498.25 -495.7590345555262 L 498.25 -485.7590345555262 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -485.7590345555262 L 498.25 -485.7590345555262 L 492.0 -495.7590345555262 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 524.15 -464.65708256396726 L 524.15 -474.65708256396726 L 536.65 -474.65708256396726 L 536.65 -464.65708256396726 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -464.65708256396726 L 536.65 -464.65708256396726 L 530.4 -474.65708256396726 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 562.55 -450.18095489316806 L 562.55 -460.18095489316806 L 575.05 -460.18095489316806 L 575.05 -450.18095489316806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -450.18095489316806 L 575.05 -450.18095489316806 L 568.8 -460.18095489316806 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.95 -440.2313373780005 L 600.95 -450.2313373780005 L 613.45 -450.2313373780005 L 613.45 -440.2313373780005 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -440.2313373780005 L 613.45 -440.2313373780005 L 607.2 -450.2313373780005 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 639.35 -515.0 L 639.35 -525.0 L 651.85 -525.0 L 651.85 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -515.0 L 651.85 -515.0 L 645.6 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 677.75 -499.11804273278824 L 677.75 -509.11804273278824 L 690.25 -509.11804273278824 L 690.25 -499.11804273278824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -499.11804273278824 L 690.25 -499.11804273278824 L 684.0 -509.11804273278824 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -367.37028488525453 L 376.8 -369.3916908467423 L 415.2 -387.21293853864415 L 453.6 -372.71649960432603 L 492.0 -363.0270113426537 L 530.4 -423.1365998417304 L 568.8 -409.0312978106041 L 607.2 -399.09372197309415 L 645.6 -391.1087839620153 L 684.0 -300.0" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 333.4 -362.37028488525453 L 343.4 -372.37028488525453" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -362.37028488525453 L 333.4 -372.37028488525453" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -364.3916908467423 L 381.8 -374.3916908467423" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -364.3916908467423 L 371.8 -374.3916908467423" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -382.21293853864415 L 420.2 -392.21293853864415" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -382.21293853864415 L 410.2 -392.21293853864415" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -367.71649960432603 L 458.6 -377.71649960432603" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -367.71649960432603 L 448.6 -377.71649960432603" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -358.0270113426537 L 497.0 -368.0270113426537" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -358.0270113426537 L 487.0 -368.0270113426537" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -418.1365998417304 L 535.4 -428.1365998417304" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -418.1365998417304 L 525.4 -428.1365998417304" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -404.0312978106041 L 573.8 -414.0312978106041" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -404.0312978106041 L 563.8 -414.0312978106041" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -394.09372197309415 L 612.2 -404.09372197309415" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -394.09372197309415 L 602.2 -404.09372197309415" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -386.1087839620153 L 650.6 -396.1087839620153" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -386.1087839620153 L 640.6 -396.1087839620153" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -295.0 L 689.0 -305.0" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -295.0 L 679.0 -305.0" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -180.66666666666669 L 314 -180.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 299.0 -172.66666666666669 L 299.0 -188.66666666666669 L 315.0 -188.66666666666669 L 315.0 -172.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -180.66666666666669 M 311.0 -180.66666666666669 L 311 -180.667 M 311 -180.667 A 4 4 0 1 0 303 -180.667 A 4 4 0 1 0 311 -180.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-176.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -162.66666666666666 L 314 -162.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 300.75 -157.66666666666666 L 300.75 -167.66666666666666 L 313.25 -167.66666666666666 L 313.25 -157.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -157.66666666666666 L 313.25 -157.66666666666666 L 307.0 -167.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -139.66666666666666 L 312.0 -149.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -139.66666666666666 L 302.0 -149.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -526 535.725 418" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -315.0656 M 342.4 -315.0656 L 342.4 -315.066 M 342.4 -315.066 A 4 4 0 1 0 334.4 -315.066 A 4 4 0 1 0 342.4 -315.066 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -329.0048 M 380.8 -329.0048 L 380.8 -329.005 M 380.8 -329.005 A 4 4 0 1 0 372.8 -329.005 A 4 4 0 1 0 380.8 -329.005 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -343.7888 M 419.2 -343.7888 L 419.2 -343.789 M 419.2 -343.789 A 4 4 0 1 0 411.2 -343.789 A 4 4 0 1 0 419.2 -343.789 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -358.1504 M 457.6 -358.1504 L 457.6 -358.15 M 457.6 -358.15 A 4 4 0 1 0 449.6 -358.15 A 4 4 0 1 0 457.6 -358.15 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -372.79359999999997 M 496.0 -372.79359999999997 L 496 -372.794 M 496 -372.794 A 4 4 0 1 0 488 -372.794 A 4 4 0 1 0 496 -372.794 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -390.9568 M 534.4 -390.9568 L 534.4 -390.957 M 534.4 -390.957 A 4 4 0 1 0 526.4 -390.957 A 4 4 0 1 0 534.4 -390.957 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -405.3184 M 572.8 -405.3184 L 572.8 -405.318 M 572.8 -405.318 A 4 4 0 1 0 564.8 -405.318 A 4 4 0 1 0 572.8 -405.318 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -413.7664 M 611.2 -413.7664 L 611.2 -413.766 M 611.2 -413.766 A 4 4 0 1 0 603.2 -413.766 A 4 4 0 1 0 611.2 -413.766 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -432.4928 M 649.6 -432.4928 L 649.6 -432.493 M 649.6 -432.493 A 4 4 0 1 0 641.6 -432.493 A 4 4 0 1 0 649.6 -432.493 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -443.0528 M 688.0 -443.0528 L 688 -443.053 M 688 -443.053 A 4 4 0 1 0 680 -443.053 A 4 4 0 1 0 688 -443.053 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -295.9152 L 332.15 -305.9152 L 344.65 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -295.9152 L 370.55 -305.9152 L 383.05 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -295.9152 L 408.95 -305.9152 L 421.45 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -295.9152 L 447.35 -305.9152 L 459.85 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -295.9152 L 485.75 -305.9152 L 498.25 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -295.9152 L 524.15 -305.9152 L 536.65 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -295.9152 L 562.55 -305.9152 L 575.05 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -295.9152 L 600.95 -305.9152 L 613.45 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -295.9152 L 639.35 -305.9152 L 651.85 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -295.9152 L 677.75 -305.9152 L 690.25 -305.9152 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 307.0 -178.66666666666669 M 311.0 -178.66666666666669 L 311 -178.667 M 311 -178.667 A 4 4 0 1 0 303 -178.667 A 4 4 0 1 0 311 -178.667 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 307.0 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -328.61056 L 288 -328.61056"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-324.111)" x="288.0" y="-324.1110467321942">
+ 3.25e+03
+ </text>
+ <path d="M 300 -357.22112 L 288 -357.22112"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-352.722)" x="288.0" y="-352.72160673219423">
+ 6.50e+03
+ </text>
+ <path d="M 300 -385.83168 L 288 -385.83168"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-381.332)" x="288.0" y="-381.3321667321942">
+ 9.75e+03
+ </text>
+ <path d="M 300 -414.44223999999997 L 288 -414.44223999999997"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-409.943)" x="288.0" y="-409.9427267321942">
+ 1.30e+04
+ </text>
+ <path d="M 300 -443.0528 L 288 -443.0528"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-438.553)" x="288.0" y="-438.55328673219424">
+ 1.63e+04
+ </text>
+ <path d="M 300 -471.66336 L 288 -471.66336"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-467.164)" x="288.0" y="-467.1638467321942">
+ 1.95e+04
+ </text>
+ <path d="M 300 -500.27392 L 288 -500.27392"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-495.774)" x="288.0" y="-495.7744067321942">
+ 2.28e+04
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -315.0656 L 376.8 -329.0048 L 415.2 -343.7888 L 453.6 -358.1504 L 492.0 -372.79359999999997 L 530.4 -390.9568 L 568.8 -405.3184 L 607.2 -413.7664 L 645.6 -432.4928 L 684.0 -443.0528" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -307.0656 L 330.4 -323.0656 L 346.4 -323.0656 L 346.4 -307.0656 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -315.0656 M 342.4 -315.0656 L 342.4 -315.066 M 342.4 -315.066 A 4 4 0 1 0 334.4 -315.066 A 4 4 0 1 0 342.4 -315.066 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -321.0048 L 368.8 -337.0048 L 384.8 -337.0048 L 384.8 -321.0048 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -329.0048 M 380.8 -329.0048 L 380.8 -329.005 M 380.8 -329.005 A 4 4 0 1 0 372.8 -329.005 A 4 4 0 1 0 380.8 -329.005 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -335.7888 L 407.2 -351.7888 L 423.2 -351.7888 L 423.2 -335.7888 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -343.7888 M 419.2 -343.7888 L 419.2 -343.789 M 419.2 -343.789 A 4 4 0 1 0 411.2 -343.789 A 4 4 0 1 0 419.2 -343.789 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -350.1504 L 445.6 -366.1504 L 461.6 -366.1504 L 461.6 -350.1504 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -358.1504 M 457.6 -358.1504 L 457.6 -358.15 M 457.6 -358.15 A 4 4 0 1 0 449.6 -358.15 A 4 4 0 1 0 457.6 -358.15 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -364.79359999999997 L 484.0 -380.79359999999997 L 500.0 -380.79359999999997 L 500.0 -364.79359999999997 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -372.79359999999997 M 496.0 -372.79359999999997 L 496 -372.794 M 496 -372.794 A 4 4 0 1 0 488 -372.794 A 4 4 0 1 0 496 -372.794 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -382.9568 L 522.4 -398.9568 L 538.4 -398.9568 L 538.4 -382.9568 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -390.9568 M 534.4 -390.9568 L 534.4 -390.957 M 534.4 -390.957 A 4 4 0 1 0 526.4 -390.957 A 4 4 0 1 0 534.4 -390.957 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -397.3184 L 560.8 -413.3184 L 576.8 -413.3184 L 576.8 -397.3184 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -405.3184 M 572.8 -405.3184 L 572.8 -405.318 M 572.8 -405.318 A 4 4 0 1 0 564.8 -405.318 A 4 4 0 1 0 572.8 -405.318 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -405.7664 L 599.2 -421.7664 L 615.2 -421.7664 L 615.2 -405.7664 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -413.7664 M 611.2 -413.7664 L 611.2 -413.766 M 611.2 -413.766 A 4 4 0 1 0 603.2 -413.766 A 4 4 0 1 0 611.2 -413.766 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -424.4928 L 637.6 -440.4928 L 653.6 -440.4928 L 653.6 -424.4928 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -432.4928 M 649.6 -432.4928 L 649.6 -432.493 M 649.6 -432.493 A 4 4 0 1 0 641.6 -432.493 A 4 4 0 1 0 649.6 -432.493 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -435.0528 L 676.0 -451.0528 L 692.0 -451.0528 L 692.0 -435.0528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -443.0528 M 688.0 -443.0528 L 688 -443.053 M 688 -443.053 A 4 4 0 1 0 680 -443.053 A 4 4 0 1 0 688 -443.053 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -300.9152 L 376.8 -300.9152 L 415.2 -300.9152 L 453.6 -300.9152 L 492.0 -300.9152 L 530.4 -300.9152 L 568.8 -300.9152 L 607.2 -300.9152 L 645.6 -300.9152 L 684.0 -300.9152" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 332.15 -295.9152 L 332.15 -305.9152 L 344.65 -305.9152 L 344.65 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -295.9152 L 332.15 -305.9152 L 344.65 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 370.55 -295.9152 L 370.55 -305.9152 L 383.05 -305.9152 L 383.05 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -295.9152 L 370.55 -305.9152 L 383.05 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.95 -295.9152 L 408.95 -305.9152 L 421.45 -305.9152 L 421.45 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -295.9152 L 408.95 -305.9152 L 421.45 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.35 -295.9152 L 447.35 -305.9152 L 459.85 -305.9152 L 459.85 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -295.9152 L 447.35 -305.9152 L 459.85 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 485.75 -295.9152 L 485.75 -305.9152 L 498.25 -305.9152 L 498.25 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -295.9152 L 485.75 -305.9152 L 498.25 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 524.15 -295.9152 L 524.15 -305.9152 L 536.65 -305.9152 L 536.65 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -295.9152 L 524.15 -305.9152 L 536.65 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 562.55 -295.9152 L 562.55 -305.9152 L 575.05 -305.9152 L 575.05 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -295.9152 L 562.55 -305.9152 L 575.05 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.95 -295.9152 L 600.95 -305.9152 L 613.45 -305.9152 L 613.45 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -295.9152 L 600.95 -305.9152 L 613.45 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 639.35 -295.9152 L 639.35 -305.9152 L 651.85 -305.9152 L 651.85 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -295.9152 L 639.35 -305.9152 L 651.85 -305.9152 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 677.75 -295.9152 L 677.75 -305.9152 L 690.25 -305.9152 L 690.25 -295.9152 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -295.9152 L 677.75 -305.9152 L 690.25 -305.9152 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -300.704 L 376.8 -300.704 L 415.2 -300.704 L 453.6 -300.704 L 492.0 -300.704 L 530.4 -300.704 L 568.8 -300.704 L 607.2 -300.704 L 645.6 -300.704 L 684.0 -300.704" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 333.4 -295.704 L 343.4 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -295.704 L 333.4 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -295.704 L 381.8 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -295.704 L 371.8 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -295.704 L 420.2 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -295.704 L 410.2 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -295.704 L 458.6 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -295.704 L 448.6 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -295.704 L 497.0 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -295.704 L 487.0 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -295.704 L 535.4 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -295.704 L 525.4 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -295.704 L 573.8 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -295.704 L 563.8 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -295.704 L 612.2 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -295.704 L 602.2 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -295.704 L 650.6 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -295.704 L 640.6 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -295.704 L 689.0 -305.704" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -295.704 L 679.0 -305.704" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 338.4 -300.5632 L 376.8 -300.5632 L 415.2 -300.5632 L 453.6 -300.5632 L 492.0 -300.5632 L 530.4 -300.5632 L 568.8 -300.5632 L 607.2 -300.5632 L 645.6 -300.5632 L 684.0 -300.5632" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <path d="M 333.4 -295.5632 L 343.4 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -295.5632 L 333.4 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -295.5632 L 381.8 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -295.5632 L 371.8 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -295.5632 L 420.2 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -295.5632 L 410.2 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -295.5632 L 458.6 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -295.5632 L 448.6 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -295.5632 L 497.0 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -295.5632 L 487.0 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -295.5632 L 535.4 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -295.5632 L 525.4 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -295.5632 L 573.8 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -295.5632 L 563.8 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -295.5632 L 612.2 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -295.5632 L 602.2 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -295.5632 L 650.6 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -295.5632 L 640.6 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -295.5632 L 689.0 -305.5632" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -295.5632 L 679.0 -305.5632" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -178.66666666666669 L 314 -178.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 299.0 -170.66666666666669 L 299.0 -186.66666666666669 L 315.0 -186.66666666666669 L 315.0 -170.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -178.66666666666669 M 311.0 -178.66666666666669 L 311 -178.667 M 311 -178.667 A 4 4 0 1 0 303 -178.667 A 4 4 0 1 0 311 -178.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-174.0">
+ n_hash_set_ncah
+ </text>
+ <path d="M 300 -160.66666666666666 L 314 -160.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 300.75 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 L 313.25 -155.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-156.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_set
+ </text>
+ <path d="M 300 -142.66666666666666 L 314 -142.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -137.66666666666666 L 312.0 -147.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -137.66666666666666 L 302.0 -147.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-138.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -124.66666666666666 L 314 -124.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -119.66666666666666 L 312.0 -129.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -119.66666666666666 L 302.0 -129.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-120.0">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 436.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 331.25714285714287 -427.41304550465907 L 338.4 -434.55590264751623 L 345.54285714285714 -427.41304550465907 L 338.4 -420.27018836180196 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 369.65714285714284 -427.91511711254185 L 376.8 -435.057974255399 L 383.9428571428571 -427.91511711254185 L 376.8 -420.7722599696847 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 408.0571428571429 -395.78253420804793 L 415.2 -402.9253913509051 L 422.34285714285716 -395.78253420804793 L 415.2 -388.63967706519077 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 446.45714285714286 -427.2546454480877 L 453.6 -434.3975025909448 L 460.74285714285713 -427.2546454480877 L 453.6 -420.1117883052305 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 484.8571428571429 -455.8133270761882 L 492.0 -462.9561842190454 L 499.1428571428571 -455.8133270761882 L 492.0 -448.6704699333311 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 523.2571428571429 -403.7923442115515 L 530.4 -410.9352013544086 L 537.5428571428572 -403.7923442115515 L 530.4 -396.6494870686943 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 561.6571428571428 -428.23686722745254 L 568.8 -435.3797243703097 L 575.9428571428572 -428.23686722745254 L 568.8 -421.0940100845954 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 600.0571428571428 -455.73978419278006 L 607.2 -462.88264133563723 L 614.3428571428572 -455.73978419278006 L 607.2 -448.5969270499229 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 638.4571428571428 -486.59809521360546 L 645.6 -493.74095235646257 L 652.7428571428572 -486.59809521360546 L 645.6 -479.4552380707483 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 676.8571428571429 -520.0 L 684.0 -527.1428571428571 L 691.1428571428571 -520.0 L 684.0 -512.8571428571429 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 332.15 -314.58524770901704 L 344.65 -314.58524770901704 L 338.4 -324.58524770901704 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 370.55 -316.8586420923722 L 383.05 -316.8586420923722 L 376.8 -326.8586420923722 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.95 -312.96136427191584 L 421.45 -312.96136427191584 L 415.2 -322.96136427191584 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 447.35 -315.2516593755926 L 459.85 -315.2516593755926 L 453.6 -325.2516593755926 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 485.75 -312.16660613093075 L 498.25 -312.16660613093075 L 492.0 -322.16660613093075 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 524.15 -313.5827309224039 L 536.65 -313.5827309224039 L 530.4 -323.5827309224039 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 562.55 -314.2230490082318 L 575.05 -314.2230490082318 L 568.8 -324.2230490082318 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.95 -315.42632372368706 L 613.45 -315.42632372368706 L 607.2 -325.42632372368706 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 639.35 -312.1963061415379 L 651.85 -312.1963061415379 L 645.6 -322.1963061415379 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 677.75 -312.96150570053777 L 690.25 -312.96150570053777 L 684.0 -322.96150570053777 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -317.1112368254417 M 342.4 -317.1112368254417 L 342.4 -317.111 M 342.4 -317.111 A 4 4 0 1 0 334.4 -317.111 A 4 4 0 1 0 342.4 -317.111 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -315.2160225771509 M 380.8 -315.2160225771509 L 380.8 -315.216 M 380.8 -315.216 A 4 4 0 1 0 372.8 -315.216 A 4 4 0 1 0 380.8 -315.216 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -314.87609888432104 M 419.2 -314.87609888432104 L 419.2 -314.876 M 419.2 -314.876 A 4 4 0 1 0 411.2 -314.876 A 4 4 0 1 0 419.2 -314.876 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -316.4453201590429 M 457.6 -316.4453201590429 L 457.6 -316.445 M 457.6 -316.445 A 4 4 0 1 0 449.6 -316.445 A 4 4 0 1 0 457.6 -316.445 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -315.1061325379045 M 496.0 -315.1061325379045 L 496 -315.106 M 496 -315.106 A 4 4 0 1 0 488 -315.106 A 4 4 0 1 0 496 -315.106 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -315.9192056854306 M 534.4 -315.9192056854306 L 534.4 -315.919 M 534.4 -315.919 A 4 4 0 1 0 526.4 -315.919 A 4 4 0 1 0 534.4 -315.919 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -315.31961904272106 M 572.8 -315.31961904272106 L 572.8 -315.32 M 572.8 -315.32 A 4 4 0 1 0 564.8 -315.32 A 4 4 0 1 0 572.8 -315.32 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -314.8980910350325 M 611.2 -314.8980910350325 L 611.2 -314.898 M 611.2 -314.898 A 4 4 0 1 0 603.2 -314.898 A 4 4 0 1 0 611.2 -314.898 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -315.60000128571477 M 649.6 -315.60000128571477 L 649.6 -315.6 M 649.6 -315.6 A 4 4 0 1 0 641.6 -315.6 A 4 4 0 1 0 649.6 -315.6 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -315.39485906959254 M 688.0 -315.39485906959254 L 688 -315.395 M 688 -315.395 A 4 4 0 1 0 680 -315.395 A 4 4 0 1 0 688 -315.395 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 338.4 -304.3340769050275 L 332.15 -314.3340769050275 L 344.65 -314.3340769050275 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 376.8 -306.87470066953597 L 370.55 -316.87470066953597 L 383.05 -316.87470066953597 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 415.2 -306.0968432488726 L 408.95 -316.0968432488726 L 421.45 -316.0968432488726 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 453.6 -307.9735303476894 L 447.35 -317.9735303476894 L 459.85 -317.9735303476894 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 492.0 -305.54562519486615 L 485.75 -315.54562519486615 L 498.25 -315.54562519486615 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 530.4 -306.09245896159246 L 524.15 -316.09245896159246 L 536.65 -316.09245896159246 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 568.8 -306.85475923384257 L 562.55 -316.85475923384257 L 575.05 -316.85475923384257 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 607.2 -307.21589721996327 L 600.95 -317.21589721996327 L 613.45 -317.21589721996327 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 645.6 -305.52335018691076 L 639.35 -315.52335018691076 L 651.85 -315.52335018691076 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 684.0 -306.07980109992894 L 677.75 -316.07980109992894 L 690.25 -316.07980109992894 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 299.85714285714283 -178.66666666666669 L 307.0 -185.8095238095238 L 314.14285714285717 -178.66666666666669 L 307.0 -171.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 300.75 -155.66666666666666 L 313.25 -155.66666666666666 L 307.0 -165.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 307.0 -142.66666666666666 M 311.0 -142.66666666666666 L 311 -142.667 M 311 -142.667 A 4 4 0 1 0 303 -142.667 A 4 4 0 1 0 311 -142.667 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 307.0 -119.66666666666666 L 300.75 -129.66666666666666 L 313.25 -129.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 6.22e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.24e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.87e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 2.49e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 3.11e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -427.41304550465907 L 376.8 -427.91511711254185 L 415.2 -395.78253420804793 L 453.6 -427.2546454480877 L 492.0 -455.8133270761882 L 530.4 -403.7923442115515 L 568.8 -428.23686722745254 L 607.2 -455.73978419278006 L 645.6 -486.59809521360546 L 684.0 -520.0" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 331.25714285714287 -420.27018836180196 L 331.25714285714287 -434.55590264751623 L 345.54285714285714 -434.55590264751623 L 345.54285714285714 -420.27018836180196 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -427.41304550465907 L 338.4 -434.55590264751623 L 345.54285714285714 -427.41304550465907 L 338.4 -420.27018836180196 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 369.65714285714284 -420.7722599696847 L 369.65714285714284 -435.057974255399 L 383.9428571428571 -435.057974255399 L 383.9428571428571 -420.7722599696847 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -427.91511711254185 L 376.8 -435.057974255399 L 383.9428571428571 -427.91511711254185 L 376.8 -420.7722599696847 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.0571428571429 -388.63967706519077 L 408.0571428571429 -402.9253913509051 L 422.34285714285716 -402.9253913509051 L 422.34285714285716 -388.63967706519077 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -395.78253420804793 L 415.2 -402.9253913509051 L 422.34285714285716 -395.78253420804793 L 415.2 -388.63967706519077 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 446.45714285714286 -420.1117883052305 L 446.45714285714286 -434.3975025909448 L 460.74285714285713 -434.3975025909448 L 460.74285714285713 -420.1117883052305 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -427.2546454480877 L 453.6 -434.3975025909448 L 460.74285714285713 -427.2546454480877 L 453.6 -420.1117883052305 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.8571428571429 -448.6704699333311 L 484.8571428571429 -462.9561842190454 L 499.1428571428571 -462.9561842190454 L 499.1428571428571 -448.6704699333311 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -455.8133270761882 L 492.0 -462.9561842190454 L 499.1428571428571 -455.8133270761882 L 492.0 -448.6704699333311 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 523.2571428571429 -396.6494870686943 L 523.2571428571429 -410.9352013544086 L 537.5428571428572 -410.9352013544086 L 537.5428571428572 -396.6494870686943 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -403.7923442115515 L 530.4 -410.9352013544086 L 537.5428571428572 -403.7923442115515 L 530.4 -396.6494870686943 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 561.6571428571428 -421.0940100845954 L 561.6571428571428 -435.3797243703097 L 575.9428571428572 -435.3797243703097 L 575.9428571428572 -421.0940100845954 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -428.23686722745254 L 568.8 -435.3797243703097 L 575.9428571428572 -428.23686722745254 L 568.8 -421.0940100845954 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.0571428571428 -448.5969270499229 L 600.0571428571428 -462.88264133563723 L 614.3428571428572 -462.88264133563723 L 614.3428571428572 -448.5969270499229 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -455.73978419278006 L 607.2 -462.88264133563723 L 614.3428571428572 -455.73978419278006 L 607.2 -448.5969270499229 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 638.4571428571428 -479.4552380707483 L 638.4571428571428 -493.74095235646257 L 652.7428571428572 -493.74095235646257 L 652.7428571428572 -479.4552380707483 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -486.59809521360546 L 645.6 -493.74095235646257 L 652.7428571428572 -486.59809521360546 L 645.6 -479.4552380707483 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.8571428571429 -512.8571428571429 L 676.8571428571429 -527.1428571428571 L 691.1428571428571 -527.1428571428571 L 691.1428571428571 -512.8571428571429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -520.0 L 684.0 -527.1428571428571 L 691.1428571428571 -520.0 L 684.0 -512.8571428571429 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -319.58524770901704 L 376.8 -321.8586420923722 L 415.2 -317.96136427191584 L 453.6 -320.2516593755926 L 492.0 -317.16660613093075 L 530.4 -318.5827309224039 L 568.8 -319.2230490082318 L 607.2 -320.42632372368706 L 645.6 -317.1963061415379 L 684.0 -317.96150570053777" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 332.15 -314.58524770901704 L 332.15 -324.58524770901704 L 344.65 -324.58524770901704 L 344.65 -314.58524770901704 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -314.58524770901704 L 344.65 -314.58524770901704 L 338.4 -324.58524770901704 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 370.55 -316.8586420923722 L 370.55 -326.8586420923722 L 383.05 -326.8586420923722 L 383.05 -316.8586420923722 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -316.8586420923722 L 383.05 -316.8586420923722 L 376.8 -326.8586420923722 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.95 -312.96136427191584 L 408.95 -322.96136427191584 L 421.45 -322.96136427191584 L 421.45 -312.96136427191584 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -312.96136427191584 L 421.45 -312.96136427191584 L 415.2 -322.96136427191584 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.35 -315.2516593755926 L 447.35 -325.2516593755926 L 459.85 -325.2516593755926 L 459.85 -315.2516593755926 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -315.2516593755926 L 459.85 -315.2516593755926 L 453.6 -325.2516593755926 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 485.75 -312.16660613093075 L 485.75 -322.16660613093075 L 498.25 -322.16660613093075 L 498.25 -312.16660613093075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -312.16660613093075 L 498.25 -312.16660613093075 L 492.0 -322.16660613093075 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 524.15 -313.5827309224039 L 524.15 -323.5827309224039 L 536.65 -323.5827309224039 L 536.65 -313.5827309224039 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -313.5827309224039 L 536.65 -313.5827309224039 L 530.4 -323.5827309224039 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 562.55 -314.2230490082318 L 562.55 -324.2230490082318 L 575.05 -324.2230490082318 L 575.05 -314.2230490082318 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -314.2230490082318 L 575.05 -314.2230490082318 L 568.8 -324.2230490082318 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.95 -315.42632372368706 L 600.95 -325.42632372368706 L 613.45 -325.42632372368706 L 613.45 -315.42632372368706 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -315.42632372368706 L 613.45 -315.42632372368706 L 607.2 -325.42632372368706 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 639.35 -312.1963061415379 L 639.35 -322.1963061415379 L 651.85 -322.1963061415379 L 651.85 -312.1963061415379 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -312.1963061415379 L 651.85 -312.1963061415379 L 645.6 -322.1963061415379 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 677.75 -312.96150570053777 L 677.75 -322.96150570053777 L 690.25 -322.96150570053777 L 690.25 -312.96150570053777 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -312.96150570053777 L 690.25 -312.96150570053777 L 684.0 -322.96150570053777 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -317.1112368254417 L 376.8 -315.2160225771509 L 415.2 -314.87609888432104 L 453.6 -316.4453201590429 L 492.0 -315.1061325379045 L 530.4 -315.9192056854306 L 568.8 -315.31961904272106 L 607.2 -314.8980910350325 L 645.6 -315.60000128571477 L 684.0 -315.39485906959254" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 330.4 -309.1112368254417 L 330.4 -325.1112368254417 L 346.4 -325.1112368254417 L 346.4 -309.1112368254417 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -317.1112368254417 M 342.4 -317.1112368254417 L 342.4 -317.111 M 342.4 -317.111 A 4 4 0 1 0 334.4 -317.111 A 4 4 0 1 0 342.4 -317.111 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 368.8 -307.2160225771509 L 368.8 -323.2160225771509 L 384.8 -323.2160225771509 L 384.8 -307.2160225771509 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -315.2160225771509 M 380.8 -315.2160225771509 L 380.8 -315.216 M 380.8 -315.216 A 4 4 0 1 0 372.8 -315.216 A 4 4 0 1 0 380.8 -315.216 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 407.2 -306.87609888432104 L 407.2 -322.87609888432104 L 423.2 -322.87609888432104 L 423.2 -306.87609888432104 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -314.87609888432104 M 419.2 -314.87609888432104 L 419.2 -314.876 M 419.2 -314.876 A 4 4 0 1 0 411.2 -314.876 A 4 4 0 1 0 419.2 -314.876 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 445.6 -308.4453201590429 L 445.6 -324.4453201590429 L 461.6 -324.4453201590429 L 461.6 -308.4453201590429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -316.4453201590429 M 457.6 -316.4453201590429 L 457.6 -316.445 M 457.6 -316.445 A 4 4 0 1 0 449.6 -316.445 A 4 4 0 1 0 457.6 -316.445 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 484.0 -307.1061325379045 L 484.0 -323.1061325379045 L 500.0 -323.1061325379045 L 500.0 -307.1061325379045 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -315.1061325379045 M 496.0 -315.1061325379045 L 496 -315.106 M 496 -315.106 A 4 4 0 1 0 488 -315.106 A 4 4 0 1 0 496 -315.106 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 522.4 -307.9192056854306 L 522.4 -323.9192056854306 L 538.4 -323.9192056854306 L 538.4 -307.9192056854306 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -315.9192056854306 M 534.4 -315.9192056854306 L 534.4 -315.919 M 534.4 -315.919 A 4 4 0 1 0 526.4 -315.919 A 4 4 0 1 0 534.4 -315.919 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 560.8 -307.31961904272106 L 560.8 -323.3196190427211 L 576.8 -323.3196190427211 L 576.8 -307.31961904272106 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -315.31961904272106 M 572.8 -315.31961904272106 L 572.8 -315.32 M 572.8 -315.32 A 4 4 0 1 0 564.8 -315.32 A 4 4 0 1 0 572.8 -315.32 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 599.2 -306.8980910350325 L 599.2 -322.8980910350325 L 615.2 -322.8980910350325 L 615.2 -306.8980910350325 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -314.8980910350325 M 611.2 -314.8980910350325 L 611.2 -314.898 M 611.2 -314.898 A 4 4 0 1 0 603.2 -314.898 A 4 4 0 1 0 611.2 -314.898 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 637.6 -307.60000128571477 L 637.6 -323.60000128571477 L 653.6 -323.60000128571477 L 653.6 -307.60000128571477 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -315.60000128571477 M 649.6 -315.60000128571477 L 649.6 -315.6 M 649.6 -315.6 A 4 4 0 1 0 641.6 -315.6 A 4 4 0 1 0 649.6 -315.6 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 676.0 -307.39485906959254 L 676.0 -323.39485906959254 L 692.0 -323.39485906959254 L 692.0 -307.39485906959254 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -315.39485906959254 M 688.0 -315.39485906959254 L 688 -315.395 M 688 -315.395 A 4 4 0 1 0 680 -315.395 A 4 4 0 1 0 688 -315.395 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -309.3340769050275 L 376.8 -311.87470066953597 L 415.2 -311.0968432488726 L 453.6 -312.9735303476894 L 492.0 -310.54562519486615 L 530.4 -311.09245896159246 L 568.8 -311.85475923384257 L 607.2 -312.21589721996327 L 645.6 -310.52335018691076 L 684.0 -311.07980109992894" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 332.15 -304.3340769050275 L 332.15 -314.3340769050275 L 344.65 -314.3340769050275 L 344.65 -304.3340769050275 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -304.3340769050275 L 332.15 -314.3340769050275 L 344.65 -314.3340769050275 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 370.55 -306.87470066953597 L 370.55 -316.87470066953597 L 383.05 -316.87470066953597 L 383.05 -306.87470066953597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -306.87470066953597 L 370.55 -316.87470066953597 L 383.05 -316.87470066953597 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 408.95 -306.0968432488726 L 408.95 -316.0968432488726 L 421.45 -316.0968432488726 L 421.45 -306.0968432488726 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -306.0968432488726 L 408.95 -316.0968432488726 L 421.45 -316.0968432488726 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 447.35 -307.9735303476894 L 447.35 -317.9735303476894 L 459.85 -317.9735303476894 L 459.85 -307.9735303476894 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -307.9735303476894 L 447.35 -317.9735303476894 L 459.85 -317.9735303476894 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 485.75 -305.54562519486615 L 485.75 -315.54562519486615 L 498.25 -315.54562519486615 L 498.25 -305.54562519486615 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -305.54562519486615 L 485.75 -315.54562519486615 L 498.25 -315.54562519486615 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 524.15 -306.09245896159246 L 524.15 -316.09245896159246 L 536.65 -316.09245896159246 L 536.65 -306.09245896159246 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -306.09245896159246 L 524.15 -316.09245896159246 L 536.65 -316.09245896159246 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 562.55 -306.85475923384257 L 562.55 -316.85475923384257 L 575.05 -316.85475923384257 L 575.05 -306.85475923384257 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -306.85475923384257 L 562.55 -316.85475923384257 L 575.05 -316.85475923384257 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 600.95 -307.21589721996327 L 600.95 -317.21589721996327 L 613.45 -317.21589721996327 L 613.45 -307.21589721996327 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -307.21589721996327 L 600.95 -317.21589721996327 L 613.45 -317.21589721996327 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 639.35 -305.52335018691076 L 639.35 -315.52335018691076 L 651.85 -315.52335018691076 L 651.85 -305.52335018691076 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -305.52335018691076 L 639.35 -315.52335018691076 L 651.85 -315.52335018691076 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 677.75 -306.07980109992894 L 677.75 -316.07980109992894 L 690.25 -316.07980109992894 L 690.25 -306.07980109992894 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -306.07980109992894 L 677.75 -316.07980109992894 L 690.25 -316.07980109992894 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip49);">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -178.66666666666669 L 314 -178.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip50);">
+ <path d="M 299.85714285714283 -171.52380952380952 L 299.85714285714283 -185.8095238095238 L 314.14285714285717 -185.8095238095238 L 314.14285714285717 -171.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -178.66666666666669 L 307.0 -185.8095238095238 L 314.14285714285717 -178.66666666666669 L 307.0 -171.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-174.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -160.66666666666666 L 314 -160.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 300.75 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 L 313.25 -155.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -155.66666666666666 L 313.25 -155.66666666666666 L 307.0 -165.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-156.0">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -142.66666666666666 L 314 -142.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 299.0 -134.66666666666666 L 299.0 -150.66666666666666 L 315.0 -150.66666666666666 L 315.0 -134.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -142.66666666666666 M 311.0 -142.66666666666666 L 311 -142.667 M 311 -142.667 A 4 4 0 1 0 303 -142.667 A 4 4 0 1 0 311 -142.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-138.0">
+ n_hash_map_ncah
+ </text>
+ <path d="M 300 -124.66666666666666 L 314 -124.66666666666666" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 300.75 -119.66666666666666 L 300.75 -129.66666666666666 L 313.25 -129.66666666666666 L 313.25 -119.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -119.66666666666666 L 300.75 -129.66666666666666 L 313.25 -129.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-120.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="224pt" height="146pt" viewBox="0.00 0.00 224.00 146.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 142)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-142 221,-142 221,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="1,-117 1,-137 215,-137 215,-117 1,-117"/>
+<text text-anchor="middle" x="108" y="-124.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::basic_invalidation_guarantee</text>
+</g>
+<!-- Node2 -->
+<g id="node3" class="node"><title>Node2</title>
+<a xlink:href="a00351.html" target="_top" xlink:title="__gnu_pbds::point_invalidation_guarantee">
+<polygon fill="white" stroke="black" points="1.5,-59 1.5,-79 214.5,-79 214.5,-59 1.5,-59"/>
+<text text-anchor="middle" x="108" y="-66.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::point_invalidation_guarantee</text>
+</a>
+</g>
+<!-- Node1->Node2 -->
+<g id="edge2" class="edge"><title>Node1->Node2</title>
+<path fill="none" stroke="midnightblue" d="M108,-106.89C108,-97.6201 108,-87.0083 108,-79.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="104.5,-106.897 108,-116.897 111.5,-106.897 104.5,-106.897"/>
+</g>
+<!-- Node3 -->
+<g id="node5" class="node"><title>Node3</title>
+<a xlink:href="a00355.html" target="_top" xlink:title="__gnu_pbds::range_invalidation_guarantee">
+<polygon fill="white" stroke="black" points="-0.5,-1 -0.5,-21 216.5,-21 216.5,-1 -0.5,-1"/>
+<text text-anchor="middle" x="108" y="-8.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::range_invalidation_guarantee</text>
+</a>
+</g>
+<!-- Node2->Node3 -->
+<g id="edge4" class="edge"><title>Node2->Node3</title>
+<path fill="none" stroke="midnightblue" d="M108,-48.8902C108,-39.6201 108,-29.0083 108,-21.3776"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="104.5,-48.8971 108,-58.8972 111.5,-48.8972 104.5,-48.8971"/>
+</g>
+</g>
+</svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 357.6 -352.28267637128954 M 361.6 -352.28267637128954 L 361.6 -352.283 M 361.6 -352.283 A 4 4 0 1 0 353.6 -352.283 A 4 4 0 1 0 361.6 -352.283 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 434.4 -392.65813127548563 M 438.4 -392.65813127548563 L 438.4 -392.658 M 438.4 -392.658 A 4 4 0 1 0 430.4 -392.658 A 4 4 0 1 0 438.4 -392.658 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 511.2 -436.7246897882229 M 515.2 -436.7246897882229 L 515.2 -436.725 M 515.2 -436.725 A 4 4 0 1 0 507.2 -436.725 A 4 4 0 1 0 515.2 -436.725 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 588.0 -473.31161485508835 M 592.0 -473.31161485508835 L 592 -473.312 M 592 -473.312 A 4 4 0 1 0 584 -473.312 A 4 4 0 1 0 592 -473.312 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 9.12e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.82e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.74e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.65e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.56e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 357.6 -352.28267637128954 L 434.4 -392.65813127548563 L 511.2 -436.7246897882229 L 588.0 -473.31161485508835 L 664.8 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 349.6 -344.28267637128954 L 349.6 -360.28267637128954 L 365.6 -360.28267637128954 L 365.6 -344.28267637128954 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 357.6 -352.28267637128954 M 361.6 -352.28267637128954 L 361.6 -352.283 M 361.6 -352.283 A 4 4 0 1 0 353.6 -352.283 A 4 4 0 1 0 361.6 -352.283 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 426.4 -384.65813127548563 L 426.4 -400.65813127548563 L 442.4 -400.65813127548563 L 442.4 -384.65813127548563 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 434.4 -392.65813127548563 M 438.4 -392.65813127548563 L 438.4 -392.658 M 438.4 -392.658 A 4 4 0 1 0 430.4 -392.658 A 4 4 0 1 0 438.4 -392.658 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 503.2 -428.7246897882229 L 503.2 -444.7246897882229 L 519.2 -444.7246897882229 L 519.2 -428.7246897882229 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.2 -436.7246897882229 M 515.2 -436.7246897882229 L 515.2 -436.725 M 515.2 -436.725 A 4 4 0 1 0 507.2 -436.725 A 4 4 0 1 0 515.2 -436.725 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 580.0 -465.31161485508835 L 580.0 -481.31161485508835 L 596.0 -481.31161485508835 L 596.0 -465.31161485508835 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 588.0 -473.31161485508835 M 592.0 -473.31161485508835 L 592 -473.312 M 592 -473.312 A 4 4 0 1 0 584 -473.312 A 4 4 0 1 0 592 -473.312 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 656.8 -512.0 L 656.8 -528.0 L 672.8 -528.0 L 672.8 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 357.6 -319.2265839435261 L 434.4 -322.2206077081598 L 511.2 -326.16313851010653 L 588.0 -331.68599991230764 L 664.8 -337.375402288771" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 352.6 -314.2265839435261 L 362.6 -324.2265839435261" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -314.2265839435261 L 352.6 -324.2265839435261" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -317.2206077081598 L 439.4 -327.2206077081598" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -317.2206077081598 L 429.4 -327.2206077081598" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -321.16313851010653 L 516.2 -331.16313851010653" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -321.16313851010653 L 506.2 -331.16313851010653" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -326.68599991230764 L 593.0 -336.68599991230764" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -326.68599991230764 L 583.0 -336.68599991230764" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -332.375402288771 L 669.8 -342.375402288771" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -332.375402288771 L 659.8 -342.375402288771" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 357.6 -320.4353926426097 L 434.4 -321.22165124742406 L 511.2 -321.2458631122024 L 588.0 -322.2087911606086 L 664.8 -321.7055026965405" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 352.6 -315.4353926426097 L 362.6 -325.4353926426097" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -315.4353926426097 L 352.6 -325.4353926426097" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -316.22165124742406 L 439.4 -326.22165124742406" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -316.22165124742406 L 429.4 -326.22165124742406" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -316.2458631122024 L 516.2 -326.2458631122024" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -316.2458631122024 L 506.2 -326.2458631122024" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -317.2087911606086 L 593.0 -327.2087911606086" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -317.2087911606086 L 583.0 -327.2087911606086" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -316.7055026965405 L 669.8 -326.7055026965405" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -316.7055026965405 L 659.8 -326.7055026965405" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 299.0 -228.66666666666666 L 299.0 -244.66666666666666 L 315.0 -244.66666666666666 L 315.0 -228.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -218.66666666666669 L 314 -218.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -213.66666666666669 L 312.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -213.66666666666669 L 302.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-214.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-200.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ lu_mtf_set
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -167.66666666666669 L 312.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -167.66666666666669 L 302.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 357.6 -418.65912233461904 M 361.6 -418.65912233461904 L 361.6 -418.659 M 361.6 -418.659 A 4 4 0 1 0 353.6 -418.659 A 4 4 0 1 0 361.6 -418.659 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 434.4 -455.05312568226475 M 438.4 -455.05312568226475 L 438.4 -455.053 M 438.4 -455.053 A 4 4 0 1 0 430.4 -455.053 A 4 4 0 1 0 438.4 -455.053 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 511.2 -479.33192635179387 M 515.2 -479.33192635179387 L 515.2 -479.332 M 515.2 -479.332 A 4 4 0 1 0 507.2 -479.332 A 4 4 0 1 0 515.2 -479.332 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 588.0 -507.1464958882177 M 592.0 -507.1464958882177 L 592 -507.146 M 592 -507.146 A 4 4 0 1 0 584 -507.146 A 4 4 0 1 0 592 -507.146 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 350.45714285714286 -369.1154210028382 L 357.6 -376.2582781456954 L 364.74285714285713 -369.1154210028382 L 357.6 -361.97256385998105 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 427.25714285714287 -376.8102758168983 L 434.4 -383.95313295975546 L 441.54285714285714 -376.8102758168983 L 434.4 -369.6674186740412 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 504.0571428571428 -385.80634597190885 L 511.2 -392.949203114766 L 518.3428571428572 -385.80634597190885 L 511.2 -378.66348882905174 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 580.8571428571429 -393.1296848846518 L 588.0 -400.2725420275089 L 595.1428571428571 -393.1296848846518 L 588.0 -385.9868277417946 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 657.6571428571428 -400.48504475656796 L 664.8 -407.62790189942507 L 671.9428571428572 -400.48504475656796 L 664.8 -393.3421876137108 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 299.85714285714283 -218.66666666666669 L 307.0 -225.8095238095238 L 314.14285714285717 -218.66666666666669 L 307.0 -211.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.21e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 2.42e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 3.63e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 4.84e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321943">
+ 6.05e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 357.6 -418.65912233461904 L 434.4 -455.05312568226475 L 511.2 -479.33192635179387 L 588.0 -507.1464958882177 L 664.8 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 349.6 -410.65912233461904 L 349.6 -426.65912233461904 L 365.6 -426.65912233461904 L 365.6 -410.65912233461904 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 357.6 -418.65912233461904 M 361.6 -418.65912233461904 L 361.6 -418.659 M 361.6 -418.659 A 4 4 0 1 0 353.6 -418.659 A 4 4 0 1 0 361.6 -418.659 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 426.4 -447.05312568226475 L 426.4 -463.05312568226475 L 442.4 -463.05312568226475 L 442.4 -447.05312568226475 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 434.4 -455.05312568226475 M 438.4 -455.05312568226475 L 438.4 -455.053 M 438.4 -455.053 A 4 4 0 1 0 430.4 -455.053 A 4 4 0 1 0 438.4 -455.053 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 503.2 -471.33192635179387 L 503.2 -487.33192635179387 L 519.2 -487.33192635179387 L 519.2 -471.33192635179387 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.2 -479.33192635179387 M 515.2 -479.33192635179387 L 515.2 -479.332 M 515.2 -479.332 A 4 4 0 1 0 507.2 -479.332 A 4 4 0 1 0 515.2 -479.332 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 580.0 -499.1464958882177 L 580.0 -515.1464958882177 L 596.0 -515.1464958882177 L 596.0 -499.1464958882177 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 588.0 -507.1464958882177 M 592.0 -507.1464958882177 L 592 -507.146 M 592 -507.146 A 4 4 0 1 0 584 -507.146 A 4 4 0 1 0 592 -507.146 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 656.8 -512.0 L 656.8 -528.0 L 672.8 -528.0 L 672.8 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 357.6 -369.1154210028382 L 434.4 -376.8102758168983 L 511.2 -385.80634597190885 L 588.0 -393.1296848846518 L 664.8 -400.48504475656796" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 350.45714285714286 -361.97256385998105 L 350.45714285714286 -376.2582781456954 L 364.74285714285713 -376.2582781456954 L 364.74285714285713 -361.97256385998105 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.45714285714286 -369.1154210028382 L 357.6 -376.2582781456954 L 364.74285714285713 -369.1154210028382 L 357.6 -361.97256385998105 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 427.25714285714287 -369.6674186740412 L 427.25714285714287 -383.95313295975546 L 441.54285714285714 -383.95313295975546 L 441.54285714285714 -369.6674186740412 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 427.25714285714287 -376.8102758168983 L 434.4 -383.95313295975546 L 441.54285714285714 -376.8102758168983 L 434.4 -369.6674186740412 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 504.0571428571428 -378.66348882905174 L 504.0571428571428 -392.949203114766 L 518.3428571428572 -392.949203114766 L 518.3428571428572 -378.66348882905174 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 504.0571428571428 -385.80634597190885 L 511.2 -392.949203114766 L 518.3428571428572 -385.80634597190885 L 511.2 -378.66348882905174 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 580.8571428571429 -385.9868277417946 L 580.8571428571429 -400.2725420275089 L 595.1428571428571 -400.2725420275089 L 595.1428571428571 -385.9868277417946 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 580.8571428571429 -393.1296848846518 L 588.0 -400.2725420275089 L 595.1428571428571 -393.1296848846518 L 588.0 -385.9868277417946 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 657.6571428571428 -393.3421876137108 L 657.6571428571428 -407.62790189942507 L 671.9428571428572 -407.62790189942507 L 671.9428571428572 -393.3421876137108 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 657.6571428571428 -400.48504475656796 L 664.8 -407.62790189942507 L 671.9428571428572 -400.48504475656796 L 664.8 -393.3421876137108 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip15);">
+ <path d="M 357.6 -368.56778982606795 L 434.4 -369.4832981587948 L 511.2 -370.27108652936465 L 588.0 -371.9077941925624 L 664.8 -371.7138490648424" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip16);">
+ <path d="M 352.6 -363.56778982606795 L 362.6 -373.56778982606795" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -363.56778982606795 L 352.6 -373.56778982606795" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -364.4832981587948 L 439.4 -374.4832981587948" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -364.4832981587948 L 429.4 -374.4832981587948" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -365.27108652936465 L 516.2 -375.27108652936465" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -365.27108652936465 L 506.2 -375.27108652936465" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -366.9077941925624 L 593.0 -376.9077941925624" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -366.9077941925624 L 583.0 -376.9077941925624" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -366.7138490648424 L 669.8 -376.7138490648424" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -366.7138490648424 L 659.8 -376.7138490648424" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 299.0 -228.66666666666666 L 299.0 -244.66666666666666 L 315.0 -244.66666666666666 L 315.0 -228.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ n_mmap
+ </text>
+ <path d="M 300 -218.66666666666669 L 314 -218.66666666666669" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 299.85714285714283 -211.52380952380952 L 299.85714285714283 -225.8095238095238 L 314.14285714285717 -225.8095238095238 L 314.14285714285717 -211.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -218.66666666666669 L 307.0 -225.8095238095238 L 314.14285714285717 -218.66666666666669 L 307.0 -211.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-214.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-200.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ lu_mtf_set
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -167.66666666666669 L 312.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -167.66666666666669 L 302.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 376.8 -393.911762030383 M 380.8 -393.911762030383 L 380.8 -393.912 M 380.8 -393.912 A 4 4 0 1 0 372.8 -393.912 A 4 4 0 1 0 380.8 -393.912 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 453.6 -425.9281360866006 M 457.6 -425.9281360866006 L 457.6 -425.928 M 457.6 -425.928 A 4 4 0 1 0 449.6 -425.928 A 4 4 0 1 0 457.6 -425.928 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 530.4 -459.4157320892516 M 534.4 -459.4157320892516 L 534.4 -459.416 M 534.4 -459.416 A 4 4 0 1 0 526.4 -459.416 A 4 4 0 1 0 534.4 -459.416 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 607.2 -491.6548193005939 M 611.2 -491.6548193005939 L 611.2 -491.655 M 611.2 -491.655 A 4 4 0 1 0 603.2 -491.655 A 4 4 0 1 0 611.2 -491.655 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 3.08e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 6.16e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 9.23e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.23e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 1.54e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 376.8 -393.911762030383 L 453.6 -425.9281360866006 L 530.4 -459.4157320892516 L 607.2 -491.6548193005939 L 684.0 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 368.8 -385.911762030383 L 368.8 -401.911762030383 L 384.8 -401.911762030383 L 384.8 -385.911762030383 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -393.911762030383 M 380.8 -393.911762030383 L 380.8 -393.912 M 380.8 -393.912 A 4 4 0 1 0 372.8 -393.912 A 4 4 0 1 0 380.8 -393.912 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 445.6 -417.9281360866006 L 445.6 -433.9281360866006 L 461.6 -433.9281360866006 L 461.6 -417.9281360866006 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -425.9281360866006 M 457.6 -425.9281360866006 L 457.6 -425.928 M 457.6 -425.928 A 4 4 0 1 0 449.6 -425.928 A 4 4 0 1 0 457.6 -425.928 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 522.4 -451.4157320892516 L 522.4 -467.4157320892516 L 538.4 -467.4157320892516 L 538.4 -451.4157320892516 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -459.4157320892516 M 534.4 -459.4157320892516 L 534.4 -459.416 M 534.4 -459.416 A 4 4 0 1 0 526.4 -459.416 A 4 4 0 1 0 534.4 -459.416 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 599.2 -483.6548193005939 L 599.2 -499.6548193005939 L 615.2 -499.6548193005939 L 615.2 -483.6548193005939 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -491.6548193005939 M 611.2 -491.6548193005939 L 611.2 -491.655 M 611.2 -491.655 A 4 4 0 1 0 603.2 -491.655 A 4 4 0 1 0 611.2 -491.655 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 676.0 -512.0 L 676.0 -528.0 L 692.0 -528.0 L 692.0 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 376.8 -359.20153084430353 L 453.6 -360.8051227404452 L 530.4 -362.5319359072657 L 607.2 -363.3200088367922 L 684.0 -364.55622409065506" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 371.8 -354.20153084430353 L 381.8 -364.20153084430353" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -354.20153084430353 L 371.8 -364.20153084430353" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -355.8051227404452 L 458.6 -365.8051227404452" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -355.8051227404452 L 448.6 -365.8051227404452" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -357.5319359072657 L 535.4 -367.5319359072657" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -357.5319359072657 L 525.4 -367.5319359072657" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -358.3200088367922 L 612.2 -368.3200088367922" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -358.3200088367922 L 602.2 -368.3200088367922" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -359.55622409065506 L 689.0 -369.55622409065506" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -359.55622409065506 L 679.0 -369.55622409065506" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 376.8 -358.2454938857195 L 453.6 -359.3646346376265 L 530.4 -362.06535327676056 L 607.2 -363.5512988785071 L 684.0 -365.91337344543933" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 371.8 -353.2454938857195 L 381.8 -363.2454938857195" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -353.2454938857195 L 371.8 -363.2454938857195" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -354.3646346376265 L 458.6 -364.3646346376265" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -354.3646346376265 L 448.6 -364.3646346376265" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -357.06535327676056 L 535.4 -367.06535327676056" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -357.06535327676056 L 525.4 -367.06535327676056" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -358.5512988785071 L 612.2 -368.5512988785071" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -358.5512988785071 L 602.2 -368.5512988785071" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -360.91337344543933 L 689.0 -370.91337344543933" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -360.91337344543933 L 679.0 -370.91337344543933" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 299.0 -228.66666666666666 L 299.0 -244.66666666666666 L 315.0 -244.66666666666666 L 315.0 -228.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -218.66666666666669 L 314 -218.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -213.66666666666669 L 312.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -213.66666666666669 L 302.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-214.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-200.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -167.66666666666669 L 312.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -167.66666666666669 L 302.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 376.8 -445.7331353751806 M 380.8 -445.7331353751806 L 380.8 -445.733 M 380.8 -445.733 A 4 4 0 1 0 372.8 -445.733 A 4 4 0 1 0 380.8 -445.733 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 453.6 -472.86240439854794 M 457.6 -472.86240439854794 L 457.6 -472.862 M 457.6 -472.862 A 4 4 0 1 0 449.6 -472.862 A 4 4 0 1 0 457.6 -472.862 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 530.4 -494.05610087054595 M 534.4 -494.05610087054595 L 534.4 -494.056 M 534.4 -494.056 A 4 4 0 1 0 526.4 -494.056 A 4 4 0 1 0 534.4 -494.056 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 607.2 -496.5950022909104 M 611.2 -496.5950022909104 L 611.2 -496.595 M 611.2 -496.595 A 4 4 0 1 0 603.2 -496.595 A 4 4 0 1 0 611.2 -496.595 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 369.65714285714284 -411.838631797836 L 376.8 -418.9814889406931 L 383.9428571428571 -411.838631797836 L 376.8 -404.69577465497883 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 446.45714285714286 -413.64237126845944 L 453.6 -420.7852284113166 L 460.74285714285713 -413.64237126845944 L 453.6 -406.49951412560233 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 523.2571428571429 -417.1946040249533 L 530.4 -424.33746116781043 L 537.5428571428572 -417.1946040249533 L 530.4 -410.05174688209615 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 600.0571428571428 -418.5200278433722 L 607.2 -425.66288498622936 L 614.3428571428572 -418.5200278433722 L 607.2 -411.3771707005151 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 676.8571428571429 -421.15391393225957 L 684.0 -428.2967710751167 L 691.1428571428571 -421.15391393225957 L 684.0 -414.0110567894024 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 9.08e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.82e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.72e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.63e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.54e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 376.8 -445.7331353751806 L 453.6 -472.86240439854794 L 530.4 -494.05610087054595 L 607.2 -496.5950022909104 L 684.0 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 368.8 -437.7331353751806 L 368.8 -453.7331353751806 L 384.8 -453.7331353751806 L 384.8 -437.7331353751806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -445.7331353751806 M 380.8 -445.7331353751806 L 380.8 -445.733 M 380.8 -445.733 A 4 4 0 1 0 372.8 -445.733 A 4 4 0 1 0 380.8 -445.733 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 445.6 -464.86240439854794 L 445.6 -480.86240439854794 L 461.6 -480.86240439854794 L 461.6 -464.86240439854794 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -472.86240439854794 M 457.6 -472.86240439854794 L 457.6 -472.862 M 457.6 -472.862 A 4 4 0 1 0 449.6 -472.862 A 4 4 0 1 0 457.6 -472.862 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 522.4 -486.05610087054595 L 522.4 -502.05610087054595 L 538.4 -502.05610087054595 L 538.4 -486.05610087054595 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -494.05610087054595 M 534.4 -494.05610087054595 L 534.4 -494.056 M 534.4 -494.056 A 4 4 0 1 0 526.4 -494.056 A 4 4 0 1 0 534.4 -494.056 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 599.2 -488.5950022909104 L 599.2 -504.5950022909104 L 615.2 -504.5950022909104 L 615.2 -488.5950022909104 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -496.5950022909104 M 611.2 -496.5950022909104 L 611.2 -496.595 M 611.2 -496.595 A 4 4 0 1 0 603.2 -496.595 A 4 4 0 1 0 611.2 -496.595 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 676.0 -512.0 L 676.0 -528.0 L 692.0 -528.0 L 692.0 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 376.8 -412.93919395199663 L 453.6 -415.11414901490855 L 530.4 -418.15462763895255 L 607.2 -417.96950445846403 L 684.0 -418.7739664469742" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 371.8 -407.93919395199663 L 381.8 -417.93919395199663" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -407.93919395199663 L 371.8 -417.93919395199663" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -410.11414901490855 L 458.6 -420.11414901490855" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -410.11414901490855 L 448.6 -420.11414901490855" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -413.15462763895255 L 535.4 -423.15462763895255" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -413.15462763895255 L 525.4 -423.15462763895255" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -412.96950445846403 L 612.2 -422.96950445846403" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -412.96950445846403 L 602.2 -422.96950445846403" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -413.7739664469742 L 689.0 -423.7739664469742" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -413.7739664469742 L 679.0 -423.7739664469742" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 376.8 -411.838631797836 L 453.6 -413.64237126845944 L 530.4 -417.1946040249533 L 607.2 -418.5200278433722 L 684.0 -421.15391393225957" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 369.65714285714284 -404.69577465497883 L 369.65714285714284 -418.9814889406931 L 383.9428571428571 -418.9814889406931 L 383.9428571428571 -404.69577465497883 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -411.838631797836 L 376.8 -418.9814889406931 L 383.9428571428571 -411.838631797836 L 376.8 -404.69577465497883 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 446.45714285714286 -406.49951412560233 L 446.45714285714286 -420.7852284113166 L 460.74285714285713 -420.7852284113166 L 460.74285714285713 -406.49951412560233 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -413.64237126845944 L 453.6 -420.7852284113166 L 460.74285714285713 -413.64237126845944 L 453.6 -406.49951412560233 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 523.2571428571429 -410.05174688209615 L 523.2571428571429 -424.33746116781043 L 537.5428571428572 -424.33746116781043 L 537.5428571428572 -410.05174688209615 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -417.1946040249533 L 530.4 -424.33746116781043 L 537.5428571428572 -417.1946040249533 L 530.4 -410.05174688209615 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 600.0571428571428 -411.3771707005151 L 600.0571428571428 -425.66288498622936 L 614.3428571428572 -425.66288498622936 L 614.3428571428572 -411.3771707005151 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -418.5200278433722 L 607.2 -425.66288498622936 L 614.3428571428572 -418.5200278433722 L 607.2 -411.3771707005151 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 676.8571428571429 -414.0110567894024 L 676.8571428571429 -428.2967710751167 L 691.1428571428571 -428.2967710751167 L 691.1428571428571 -414.0110567894024 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -421.15391393225957 L 684.0 -428.2967710751167 L 691.1428571428571 -421.15391393225957 L 684.0 -414.0110567894024 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 299.0 -228.66666666666666 L 299.0 -244.66666666666666 L 315.0 -244.66666666666666 L 315.0 -228.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ n_mmap
+ </text>
+ <path d="M 300 -218.66666666666669 L 314 -218.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -213.66666666666669 L 312.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -213.66666666666669 L 302.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-214.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-200.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 299.85714285714283 -165.52380952380952 L 299.85714285714283 -179.8095238095238 L 314.14285714285717 -179.8095238095238 L 314.14285714285717 -165.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -526 535.725 398" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 357.6 -301.1115789473684 M 361.6 -301.1115789473684 L 361.6 -301.112 M 361.6 -301.112 A 4 4 0 1 0 353.6 -301.112 A 4 4 0 1 0 361.6 -301.112 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 434.4 -331.01305263157894 M 438.4 -331.01305263157894 L 438.4 -331.013 M 438.4 -331.013 A 4 4 0 1 0 430.4 -331.013 A 4 4 0 1 0 438.4 -331.013 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.2 -370.2517894736842 M 515.2 -370.2517894736842 L 515.2 -370.252 M 515.2 -370.252 A 4 4 0 1 0 507.2 -370.252 A 4 4 0 1 0 515.2 -370.252 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 588.0 -392.48336842105266 M 592.0 -392.48336842105266 L 592 -392.483 M 592 -392.483 A 4 4 0 1 0 584 -392.483 A 4 4 0 1 0 592 -392.483 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 664.8 -451.73052631578946 M 668.8 -451.73052631578946 L 668.8 -451.731 M 668.8 -451.731 A 4 4 0 1 0 660.8 -451.731 A 4 4 0 1 0 668.8 -451.731 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -323.1578947368421 L 780 -323.1578947368421" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -346.3157894736842 L 780 -346.3157894736842" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -369.4736842105263 L 780 -369.4736842105263" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -392.63157894736844 L 780 -392.63157894736844" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -415.7894736842105 L 780 -415.7894736842105" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -438.9473684210526 L 780 -438.9473684210526" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -462.10526315789474 L 780 -462.10526315789474" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -485.2631578947369 L 780 -485.2631578947369" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -508.42105263157896 L 780 -508.42105263157896" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 1.00e+04
+ </text>
+ <path d="M 300 -344.3001263157895 L 288 -344.3001263157895"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.801)" x="288.0" y="-339.8006130479837">
+ 2.91e+04
+ </text>
+ <path d="M 300 -388.60025263157894 L 288 -388.60025263157894"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-384.101)" x="288.0" y="-384.1007393637732">
+ 4.83e+04
+ </text>
+ <path d="M 300 -432.9003789473684 L 288 -432.9003789473684"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-428.401)" x="288.0" y="-428.4008656795626">
+ 6.74e+04
+ </text>
+ <path d="M 300 -477.2005052631579 L 288 -477.2005052631579"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-472.701)" x="288.0" y="-472.7009919953521">
+ 8.65e+04
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 357.6 -335.3111578947368 L 434.4 -364.95326315789475 L 511.2 -409.41642105263156 L 588.0 -424.2374736842105 L 664.8 -498.3427368421053" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 352.6 -330.3111578947368 L 362.6 -340.3111578947368" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -330.3111578947368 L 352.6 -340.3111578947368" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -359.95326315789475 L 439.4 -369.95326315789475" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -359.95326315789475 L 429.4 -369.95326315789475" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -404.41642105263156 L 516.2 -414.41642105263156" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -404.41642105263156 L 506.2 -414.41642105263156" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -419.2374736842105 L 593.0 -429.2374736842105" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -419.2374736842105 L 583.0 -429.2374736842105" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -493.3427368421053 L 669.8 -503.3427368421053" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -493.3427368421053 L 659.8 -503.3427368421053" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 357.6 -301.1115789473684 L 434.4 -331.01305263157894 L 511.2 -370.2517894736842 L 588.0 -392.48336842105266 L 664.8 -451.73052631578946" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 349.6 -293.1115789473684 L 349.6 -309.1115789473684 L 365.6 -309.1115789473684 L 365.6 -293.1115789473684 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 357.6 -301.1115789473684 M 361.6 -301.1115789473684 L 361.6 -301.112 M 361.6 -301.112 A 4 4 0 1 0 353.6 -301.112 A 4 4 0 1 0 361.6 -301.112 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 426.4 -323.01305263157894 L 426.4 -339.01305263157894 L 442.4 -339.01305263157894 L 442.4 -323.01305263157894 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 434.4 -331.01305263157894 M 438.4 -331.01305263157894 L 438.4 -331.013 M 438.4 -331.013 A 4 4 0 1 0 430.4 -331.013 A 4 4 0 1 0 438.4 -331.013 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 503.2 -362.2517894736842 L 503.2 -378.2517894736842 L 519.2 -378.2517894736842 L 519.2 -362.2517894736842 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.2 -370.2517894736842 M 515.2 -370.2517894736842 L 515.2 -370.252 M 515.2 -370.252 A 4 4 0 1 0 507.2 -370.252 A 4 4 0 1 0 515.2 -370.252 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 580.0 -384.48336842105266 L 580.0 -400.48336842105266 L 596.0 -400.48336842105266 L 596.0 -384.48336842105266 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 588.0 -392.48336842105266 M 592.0 -392.48336842105266 L 592 -392.483 M 592 -392.483 A 4 4 0 1 0 584 -392.483 A 4 4 0 1 0 592 -392.483 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 656.8 -443.73052631578946 L 656.8 -459.73052631578946 L 672.8 -459.73052631578946 L 672.8 -443.73052631578946 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 664.8 -451.73052631578946 M 668.8 -451.73052631578946 L 668.8 -451.731 M 668.8 -451.731 A 4 4 0 1 0 660.8 -451.731 A 4 4 0 1 0 668.8 -451.731 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 357.6 -301.9637894736842 L 434.4 -316.7848421052632 L 511.2 -331.6058947368421 L 588.0 -346.42694736842105 L 664.8 -361.248" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 352.6 -296.9637894736842 L 362.6 -306.9637894736842" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -296.9637894736842 L 352.6 -306.9637894736842" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -311.7848421052632 L 439.4 -321.7848421052632" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -311.7848421052632 L 429.4 -321.7848421052632" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -326.6058947368421 L 516.2 -336.6058947368421" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -326.6058947368421 L 506.2 -336.6058947368421" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -341.42694736842105 L 593.0 -351.42694736842105" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -341.42694736842105 L 583.0 -351.42694736842105" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -356.248 L 669.8 -366.248" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -356.248 L 659.8 -366.248" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -231.66666666666666 L 312.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -231.66666666666666 L 302.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-218.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-204.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -190.66666666666669 L 314 -190.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 299.0 -182.66666666666669 L 299.0 -198.66666666666669 L 315.0 -198.66666666666669 L 315.0 -182.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -167.66666666666669 L 312.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -167.66666666666669 L 302.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -526 535.725 398" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 357.6 -310.1894736842105 M 361.6 -310.1894736842105 L 361.6 -310.189 M 361.6 -310.189 A 4 4 0 1 0 353.6 -310.189 A 4 4 0 1 0 361.6 -310.189 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 434.4 -354.65263157894736 M 438.4 -354.65263157894736 L 438.4 -354.653 M 438.4 -354.653 A 4 4 0 1 0 430.4 -354.653 A 4 4 0 1 0 438.4 -354.653 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 511.2 -399.11578947368423 M 515.2 -399.11578947368423 L 515.2 -399.116 M 515.2 -399.116 A 4 4 0 1 0 507.2 -399.116 A 4 4 0 1 0 515.2 -399.116 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 588.0 -443.57894736842104 M 592.0 -443.57894736842104 L 592 -443.579 M 592 -443.579 A 4 4 0 1 0 584 -443.579 A 4 4 0 1 0 592 -443.579 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 664.8 -488.0421052631579 M 668.8 -488.0421052631579 L 668.8 -488.042 M 668.8 -488.042 A 4 4 0 1 0 660.8 -488.042 A 4 4 0 1 0 668.8 -488.042 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 350.45714285714286 -302.92715789473687 L 357.6 -310.070015037594 L 364.74285714285713 -302.92715789473687 L 357.6 -295.7843007518797 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 427.25714285714287 -317.7482105263158 L 434.4 -324.8910676691729 L 441.54285714285714 -317.7482105263158 L 434.4 -310.60535338345863 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 504.0571428571428 -332.56926315789474 L 511.2 -339.7121203007519 L 518.3428571428572 -332.56926315789474 L 511.2 -325.42640601503757 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 580.8571428571429 -347.3903157894737 L 588.0 -354.53317293233084 L 595.1428571428571 -347.3903157894737 L 588.0 -340.24745864661656 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 657.6571428571428 -362.2113684210526 L 664.8 -369.3542255639098 L 671.9428571428572 -362.2113684210526 L 664.8 -355.0685112781955 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -323.1578947368421 L 780 -323.1578947368421" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -346.3157894736842 L 780 -346.3157894736842" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -369.4736842105263 L 780 -369.4736842105263" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -392.63157894736844 L 780 -392.63157894736844" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -415.7894736842105 L 780 -415.7894736842105" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -438.9473684210526 L 780 -438.9473684210526" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -462.10526315789474 L 780 -462.10526315789474" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -485.2631578947369 L 780 -485.2631578947369" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -508.42105263157896 L 780 -508.42105263157896" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 1.00e+04
+ </text>
+ <path d="M 300 -344.52985263157893 L 288 -344.52985263157893"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-340.03)" x="288.0" y="-340.0303393637732">
+ 2.92e+04
+ </text>
+ <path d="M 300 -389.05970526315787 L 288 -389.05970526315787"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-384.56)" x="288.0" y="-384.5601919953521">
+ 4.85e+04
+ </text>
+ <path d="M 300 -433.5895578947368 L 288 -433.5895578947368"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-429.09)" x="288.0" y="-429.09004462693105">
+ 6.77e+04
+ </text>
+ <path d="M 300 -478.1194105263158 L 288 -478.1194105263158"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-473.62)" x="288.0" y="-473.61989725851004">
+ 8.69e+04
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 357.6 -336.4597894736842 L 434.4 -366.1018947368421 L 511.2 -410.56505263157896 L 588.0 -425.3861052631579 L 664.8 -499.49136842105264" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 352.6 -331.4597894736842 L 362.6 -341.4597894736842" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -331.4597894736842 L 352.6 -341.4597894736842" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -361.1018947368421 L 439.4 -371.1018947368421" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -361.1018947368421 L 429.4 -371.1018947368421" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -405.56505263157896 L 516.2 -415.56505263157896" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -405.56505263157896 L 506.2 -415.56505263157896" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -420.3861052631579 L 593.0 -430.3861052631579" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -420.3861052631579 L 583.0 -430.3861052631579" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -494.49136842105264 L 669.8 -504.49136842105264" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -494.49136842105264 L 659.8 -504.49136842105264" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 357.6 -310.1894736842105 L 434.4 -354.65263157894736 L 511.2 -399.11578947368423 L 588.0 -443.57894736842104 L 664.8 -488.0421052631579" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 349.6 -302.1894736842105 L 349.6 -318.1894736842105 L 365.6 -318.1894736842105 L 365.6 -302.1894736842105 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 357.6 -310.1894736842105 M 361.6 -310.1894736842105 L 361.6 -310.189 M 361.6 -310.189 A 4 4 0 1 0 353.6 -310.189 A 4 4 0 1 0 361.6 -310.189 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 426.4 -346.65263157894736 L 426.4 -362.65263157894736 L 442.4 -362.65263157894736 L 442.4 -346.65263157894736 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 434.4 -354.65263157894736 M 438.4 -354.65263157894736 L 438.4 -354.653 M 438.4 -354.653 A 4 4 0 1 0 430.4 -354.653 A 4 4 0 1 0 438.4 -354.653 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 503.2 -391.11578947368423 L 503.2 -407.11578947368423 L 519.2 -407.11578947368423 L 519.2 -391.11578947368423 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.2 -399.11578947368423 M 515.2 -399.11578947368423 L 515.2 -399.116 M 515.2 -399.116 A 4 4 0 1 0 507.2 -399.116 A 4 4 0 1 0 515.2 -399.116 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 580.0 -435.57894736842104 L 580.0 -451.57894736842104 L 596.0 -451.57894736842104 L 596.0 -435.57894736842104 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 588.0 -443.57894736842104 M 592.0 -443.57894736842104 L 592 -443.579 M 592 -443.579 A 4 4 0 1 0 584 -443.579 A 4 4 0 1 0 592 -443.579 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 656.8 -480.0421052631579 L 656.8 -496.0421052631579 L 672.8 -496.0421052631579 L 672.8 -480.0421052631579 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 664.8 -488.0421052631579 M 668.8 -488.0421052631579 L 668.8 -488.042 M 668.8 -488.042 A 4 4 0 1 0 660.8 -488.042 A 4 4 0 1 0 668.8 -488.042 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 357.6 -302.92715789473687 L 434.4 -317.7482105263158 L 511.2 -332.56926315789474 L 588.0 -347.3903157894737 L 664.8 -362.2113684210526" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 350.45714285714286 -295.7843007518797 L 350.45714285714286 -310.070015037594 L 364.74285714285713 -310.070015037594 L 364.74285714285713 -295.7843007518797 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.45714285714286 -302.92715789473687 L 357.6 -310.070015037594 L 364.74285714285713 -302.92715789473687 L 357.6 -295.7843007518797 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 427.25714285714287 -310.60535338345863 L 427.25714285714287 -324.8910676691729 L 441.54285714285714 -324.8910676691729 L 441.54285714285714 -310.60535338345863 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 427.25714285714287 -317.7482105263158 L 434.4 -324.8910676691729 L 441.54285714285714 -317.7482105263158 L 434.4 -310.60535338345863 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 504.0571428571428 -325.42640601503757 L 504.0571428571428 -339.7121203007519 L 518.3428571428572 -339.7121203007519 L 518.3428571428572 -325.42640601503757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 504.0571428571428 -332.56926315789474 L 511.2 -339.7121203007519 L 518.3428571428572 -332.56926315789474 L 511.2 -325.42640601503757 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 580.8571428571429 -340.24745864661656 L 580.8571428571429 -354.53317293233084 L 595.1428571428571 -354.53317293233084 L 595.1428571428571 -340.24745864661656 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 580.8571428571429 -347.3903157894737 L 588.0 -354.53317293233084 L 595.1428571428571 -347.3903157894737 L 588.0 -340.24745864661656 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 657.6571428571428 -355.0685112781955 L 657.6571428571428 -369.3542255639098 L 671.9428571428572 -369.3542255639098 L 671.9428571428572 -355.0685112781955 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 657.6571428571428 -362.2113684210526 L 664.8 -369.3542255639098 L 671.9428571428572 -362.2113684210526 L 664.8 -355.0685112781955 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -231.66666666666666 L 312.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -231.66666666666666 L 302.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-218.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-204.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -190.66666666666669 L 314 -190.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 299.0 -182.66666666666669 L 299.0 -198.66666666666669 L 315.0 -198.66666666666669 L 315.0 -182.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ n_mmap
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 299.85714285714283 -165.52380952380952 L 299.85714285714283 -179.8095238095238 L 314.14285714285717 -179.8095238095238 L 314.14285714285717 -165.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -526 535.725 398" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 376.8 -311.3344 M 380.8 -311.3344 L 380.8 -311.334 M 380.8 -311.334 A 4 4 0 1 0 372.8 -311.334 A 4 4 0 1 0 380.8 -311.334 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 453.6 -322.69696 M 457.6 -322.69696 L 457.6 -322.697 M 457.6 -322.697 A 4 4 0 1 0 449.6 -322.697 A 4 4 0 1 0 457.6 -322.697 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 530.4 -337.60768 M 534.4 -337.60768 L 534.4 -337.608 M 534.4 -337.608 A 4 4 0 1 0 526.4 -337.608 A 4 4 0 1 0 534.4 -337.608 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -346.05568 M 611.2 -346.05568 L 611.2 -346.056 M 611.2 -346.056 A 4 4 0 1 0 603.2 -346.056 A 4 4 0 1 0 611.2 -346.056 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 684.0 -368.5696 M 688.0 -368.5696 L 688 -368.57 M 688 -368.57 A 4 4 0 1 0 680 -368.57 A 4 4 0 1 0 688 -368.57 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 307.0 -144.66666666666666 M 311.0 -144.66666666666666 L 311 -144.667 M 311 -144.667 A 4 4 0 1 0 303 -144.667 A 4 4 0 1 0 311 -144.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -324.532992 L 288 -324.532992"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-320.033)" x="288.0" y="-320.0334787321942">
+ 2.79e+04
+ </text>
+ <path d="M 300 -349.065984 L 288 -349.065984"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-344.566)" x="288.0" y="-344.5664707321942">
+ 5.58e+04
+ </text>
+ <path d="M 300 -373.598976 L 288 -373.598976"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-369.099)" x="288.0" y="-369.09946273219424">
+ 8.36e+04
+ </text>
+ <path d="M 300 -398.13196800000003 L 288 -398.13196800000003"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-393.632)" x="288.0" y="-393.6324547321942">
+ 1.12e+05
+ </text>
+ <path d="M 300 -422.66496 L 288 -422.66496"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-418.165)" x="288.0" y="-418.1654467321942">
+ 1.39e+05
+ </text>
+ <path d="M 300 -447.197952 L 288 -447.197952"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-442.698)" x="288.0" y="-442.6984387321942">
+ 1.67e+05
+ </text>
+ <path d="M 300 -471.730944 L 288 -471.730944"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-467.231)" x="288.0" y="-467.2314307321942">
+ 1.95e+05
+ </text>
+ <path d="M 300 -496.26393599999994 L 288 -496.26393599999994"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-491.764)" x="288.0" y="-491.7644227321942">
+ 2.23e+05
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 376.8 -377.60896 L 453.6 -383.24096 L 530.4 -388.87296000000003 L 607.2 -417.03296 L 684.0 -422.66496" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 371.8 -372.60896 L 381.8 -382.60896" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -372.60896 L 371.8 -382.60896" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -378.24096 L 458.6 -388.24096" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -378.24096 L 448.6 -388.24096" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -383.87296000000003 L 535.4 -393.87296000000003" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -383.87296000000003 L 525.4 -393.87296000000003" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -412.03296 L 612.2 -422.03296" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -412.03296 L 602.2 -422.03296" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -417.66496 L 689.0 -427.66496" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -417.66496 L 679.0 -427.66496" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 376.8 -326.92096 L 453.6 -332.55296 L 530.4 -338.18496 L 607.2 -343.81696 L 684.0 -349.44896" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <path d="M 371.8 -321.92096 L 381.8 -331.92096" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -321.92096 L 371.8 -331.92096" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -327.55296 L 458.6 -337.55296" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -327.55296 L 448.6 -337.55296" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -333.18496 L 535.4 -343.18496" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -333.18496 L 525.4 -343.18496" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -338.81696 L 612.2 -348.81696" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -338.81696 L 602.2 -348.81696" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -344.44896 L 689.0 -354.44896" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -344.44896 L 679.0 -354.44896" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip5);">
+ <path d="M 376.8 -311.3344 L 453.6 -322.69696 L 530.4 -337.60768 L 607.2 -346.05568 L 684.0 -368.5696" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip6);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 368.8 -303.3344 L 368.8 -319.3344 L 384.8 -319.3344 L 384.8 -303.3344 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -311.3344 M 380.8 -311.3344 L 380.8 -311.334 M 380.8 -311.334 A 4 4 0 1 0 372.8 -311.334 A 4 4 0 1 0 380.8 -311.334 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 445.6 -314.69696 L 445.6 -330.69696 L 461.6 -330.69696 L 461.6 -314.69696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -322.69696 M 457.6 -322.69696 L 457.6 -322.697 M 457.6 -322.697 A 4 4 0 1 0 449.6 -322.697 A 4 4 0 1 0 457.6 -322.697 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 522.4 -329.60768 L 522.4 -345.60768 L 538.4 -345.60768 L 538.4 -329.60768 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -337.60768 M 534.4 -337.60768 L 534.4 -337.608 M 534.4 -337.608 A 4 4 0 1 0 526.4 -337.608 A 4 4 0 1 0 534.4 -337.608 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -338.05568 L 599.2 -354.05568 L 615.2 -354.05568 L 615.2 -338.05568 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -346.05568 M 611.2 -346.05568 L 611.2 -346.056 M 611.2 -346.056 A 4 4 0 1 0 603.2 -346.056 A 4 4 0 1 0 611.2 -346.056 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 676.0 -360.5696 L 676.0 -376.5696 L 692.0 -376.5696 L 692.0 -360.5696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -368.5696 M 688.0 -368.5696 L 688 -368.57 M 688 -368.57 A 4 4 0 1 0 680 -368.57 A 4 4 0 1 0 688 -368.57 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -231.66666666666666 L 312.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -231.66666666666666 L 302.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-218.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-204.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -190.66666666666669 L 314 -190.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -185.66666666666669 L 312.0 -195.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -185.66666666666669 L 302.0 -195.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-172.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ lu_mtf_set
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 299.0 -136.66666666666666 L 299.0 -152.66666666666666 L 315.0 -152.66666666666666 L 315.0 -136.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -144.66666666666666 M 311.0 -144.66666666666666 L 311 -144.667 M 311 -144.667 A 4 4 0 1 0 303 -144.667 A 4 4 0 1 0 311 -144.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ n_hash_mmap
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -526 535.725 398" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 376.8 -316.896 M 380.8 -316.896 L 380.8 -316.896 M 380.8 -316.896 A 4 4 0 1 0 372.8 -316.896 A 4 4 0 1 0 380.8 -316.896 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -333.79200000000003 M 457.6 -333.79200000000003 L 457.6 -333.792 M 457.6 -333.792 A 4 4 0 1 0 449.6 -333.792 A 4 4 0 1 0 457.6 -333.792 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 530.4 -350.688 M 534.4 -350.688 L 534.4 -350.688 M 534.4 -350.688 A 4 4 0 1 0 526.4 -350.688 A 4 4 0 1 0 534.4 -350.688 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 607.2 -367.584 M 611.2 -367.584 L 611.2 -367.584 M 611.2 -367.584 A 4 4 0 1 0 603.2 -367.584 A 4 4 0 1 0 611.2 -367.584 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 684.0 -384.48 M 688.0 -384.48 L 688 -384.48 M 688 -384.48 A 4 4 0 1 0 680 -384.48 A 4 4 0 1 0 688 -384.48 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 369.65714285714284 -328.21632 L 376.8 -335.35917714285716 L 383.9428571428571 -328.21632 L 376.8 -321.0734628571429 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 446.45714285714286 -333.84832 L 453.6 -340.99117714285717 L 460.74285714285713 -333.84832 L 453.6 -326.70546285714283 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 523.2571428571429 -339.48032 L 530.4 -346.6231771428571 L 537.5428571428572 -339.48032 L 530.4 -332.33746285714284 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 600.0571428571428 -345.11232 L 607.2 -352.2551771428571 L 614.3428571428572 -345.11232 L 607.2 -337.96946285714284 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 676.8571428571429 -350.74432 L 684.0 -357.8871771428571 L 691.1428571428571 -350.74432 L 684.0 -343.60146285714285 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -324.806144 L 288 -324.806144"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-320.307)" x="288.0" y="-320.3066307321942">
+ 2.82e+04
+ </text>
+ <path d="M 300 -349.612288 L 288 -349.612288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-345.113)" x="288.0" y="-345.1127747321942">
+ 5.64e+04
+ </text>
+ <path d="M 300 -374.418432 L 288 -374.418432"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-369.919)" x="288.0" y="-369.91891873219424">
+ 8.46e+04
+ </text>
+ <path d="M 300 -399.224576 L 288 -399.224576"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-394.725)" x="288.0" y="-394.7250627321942">
+ 1.13e+05
+ </text>
+ <path d="M 300 -424.03072 L 288 -424.03072"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-419.531)" x="288.0" y="-419.5312067321942">
+ 1.41e+05
+ </text>
+ <path d="M 300 -448.836864 L 288 -448.836864"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-444.337)" x="288.0" y="-444.3373507321942">
+ 1.69e+05
+ </text>
+ <path d="M 300 -473.643008 L 288 -473.643008"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-469.143)" x="288.0" y="-469.1434947321942">
+ 1.97e+05
+ </text>
+ <path d="M 300 -498.44915199999997 L 288 -498.44915199999997"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-493.95)" x="288.0" y="-493.9496387321942">
+ 2.26e+05
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 376.8 -378.97472 L 453.6 -384.60672 L 530.4 -390.23872 L 607.2 -418.39872 L 684.0 -424.03072" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 371.8 -373.97472 L 381.8 -383.97472" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -373.97472 L 371.8 -383.97472" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -379.60672 L 458.6 -389.60672" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -379.60672 L 448.6 -389.60672" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -385.23872 L 535.4 -395.23872" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -385.23872 L 525.4 -395.23872" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -413.39872 L 612.2 -423.39872" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -413.39872 L 602.2 -423.39872" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -419.03072 L 689.0 -429.03072" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -419.03072 L 679.0 -429.03072" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 376.8 -316.896 L 453.6 -333.79200000000003 L 530.4 -350.688 L 607.2 -367.584 L 684.0 -384.48" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 368.8 -308.896 L 368.8 -324.896 L 384.8 -324.896 L 384.8 -308.896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -316.896 M 380.8 -316.896 L 380.8 -316.896 M 380.8 -316.896 A 4 4 0 1 0 372.8 -316.896 A 4 4 0 1 0 380.8 -316.896 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -325.79200000000003 L 445.6 -341.79200000000003 L 461.6 -341.79200000000003 L 461.6 -325.79200000000003 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -333.79200000000003 M 457.6 -333.79200000000003 L 457.6 -333.792 M 457.6 -333.792 A 4 4 0 1 0 449.6 -333.792 A 4 4 0 1 0 457.6 -333.792 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 522.4 -342.688 L 522.4 -358.688 L 538.4 -358.688 L 538.4 -342.688 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -350.688 M 534.4 -350.688 L 534.4 -350.688 M 534.4 -350.688 A 4 4 0 1 0 526.4 -350.688 A 4 4 0 1 0 534.4 -350.688 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 599.2 -359.584 L 599.2 -375.584 L 615.2 -375.584 L 615.2 -359.584 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -367.584 M 611.2 -367.584 L 611.2 -367.584 M 611.2 -367.584 A 4 4 0 1 0 603.2 -367.584 A 4 4 0 1 0 611.2 -367.584 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 676.0 -376.48 L 676.0 -392.48 L 692.0 -392.48 L 692.0 -376.48 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -384.48 M 688.0 -384.48 L 688 -384.48 M 688 -384.48 A 4 4 0 1 0 680 -384.48 A 4 4 0 1 0 688 -384.48 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 376.8 -328.21632 L 453.6 -333.84832 L 530.4 -339.48032 L 607.2 -345.11232 L 684.0 -350.74432" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 369.65714285714284 -321.0734628571429 L 369.65714285714284 -335.35917714285716 L 383.9428571428571 -335.35917714285716 L 383.9428571428571 -321.0734628571429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -328.21632 L 376.8 -335.35917714285716 L 383.9428571428571 -328.21632 L 376.8 -321.0734628571429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 446.45714285714286 -326.70546285714283 L 446.45714285714286 -340.99117714285717 L 460.74285714285713 -340.99117714285717 L 460.74285714285713 -326.70546285714283 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -333.84832 L 453.6 -340.99117714285717 L 460.74285714285713 -333.84832 L 453.6 -326.70546285714283 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 523.2571428571429 -332.33746285714284 L 523.2571428571429 -346.6231771428571 L 537.5428571428572 -346.6231771428571 L 537.5428571428572 -332.33746285714284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -339.48032 L 530.4 -346.6231771428571 L 537.5428571428572 -339.48032 L 530.4 -332.33746285714284 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 600.0571428571428 -337.96946285714284 L 600.0571428571428 -352.2551771428571 L 614.3428571428572 -352.2551771428571 L 614.3428571428572 -337.96946285714284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -345.11232 L 607.2 -352.2551771428571 L 614.3428571428572 -345.11232 L 607.2 -337.96946285714284 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 676.8571428571429 -343.60146285714285 L 676.8571428571429 -357.8871771428571 L 691.1428571428571 -357.8871771428571 L 691.1428571428571 -343.60146285714285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -350.74432 L 684.0 -357.8871771428571 L 691.1428571428571 -350.74432 L 684.0 -343.60146285714285 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -231.66666666666666 L 312.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -231.66666666666666 L 302.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-218.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-204.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -190.66666666666669 L 314 -190.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 299.0 -182.66666666666669 L 299.0 -198.66666666666669 L 315.0 -198.66666666666669 L 315.0 -182.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ n_mmap
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 299.85714285714283 -165.52380952380952 L 299.85714285714283 -179.8095238095238 L 314.14285714285717 -179.8095238095238 L 314.14285714285717 -165.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 357.6 -419.1525365323605 M 361.6 -419.1525365323605 L 361.6 -419.153 M 361.6 -419.153 A 4 4 0 1 0 353.6 -419.153 A 4 4 0 1 0 361.6 -419.153 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 434.4 -444.59385387974703 M 438.4 -444.59385387974703 L 438.4 -444.594 M 438.4 -444.594 A 4 4 0 1 0 430.4 -444.594 A 4 4 0 1 0 438.4 -444.594 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 511.2 -467.2453646803691 M 515.2 -467.2453646803691 L 515.2 -467.245 M 515.2 -467.245 A 4 4 0 1 0 507.2 -467.245 A 4 4 0 1 0 515.2 -467.245 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 588.0 -489.8104521260099 M 592.0 -489.8104521260099 L 592 -489.81 M 592 -489.81 A 4 4 0 1 0 584 -489.81 A 4 4 0 1 0 592 -489.81 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 8.71e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.74e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.61e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.48e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.35e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 357.6 -419.1525365323605 L 434.4 -444.59385387974703 L 511.2 -467.2453646803691 L 588.0 -489.8104521260099 L 664.8 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 349.6 -411.1525365323605 L 349.6 -427.1525365323605 L 365.6 -427.1525365323605 L 365.6 -411.1525365323605 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 357.6 -419.1525365323605 M 361.6 -419.1525365323605 L 361.6 -419.153 M 361.6 -419.153 A 4 4 0 1 0 353.6 -419.153 A 4 4 0 1 0 361.6 -419.153 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 426.4 -436.59385387974703 L 426.4 -452.59385387974703 L 442.4 -452.59385387974703 L 442.4 -436.59385387974703 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 434.4 -444.59385387974703 M 438.4 -444.59385387974703 L 438.4 -444.594 M 438.4 -444.594 A 4 4 0 1 0 430.4 -444.594 A 4 4 0 1 0 438.4 -444.594 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 503.2 -459.2453646803691 L 503.2 -475.2453646803691 L 519.2 -475.2453646803691 L 519.2 -459.2453646803691 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.2 -467.2453646803691 M 515.2 -467.2453646803691 L 515.2 -467.245 M 515.2 -467.245 A 4 4 0 1 0 507.2 -467.245 A 4 4 0 1 0 515.2 -467.245 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 580.0 -481.8104521260099 L 580.0 -497.8104521260099 L 596.0 -497.8104521260099 L 596.0 -481.8104521260099 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 588.0 -489.8104521260099 M 592.0 -489.8104521260099 L 592 -489.81 M 592 -489.81 A 4 4 0 1 0 584 -489.81 A 4 4 0 1 0 592 -489.81 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 656.8 -512.0 L 656.8 -528.0 L 672.8 -528.0 L 672.8 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 357.6 -464.55815428016143 L 434.4 -441.7671531522011 L 511.2 -414.2981720610431 L 588.0 -400.50126464797756 L 664.8 -406.1314177151797" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 352.6 -459.55815428016143 L 362.6 -469.55815428016143" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -459.55815428016143 L 352.6 -469.55815428016143" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -436.7671531522011 L 439.4 -446.7671531522011" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -436.7671531522011 L 429.4 -446.7671531522011" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -409.2981720610431 L 516.2 -419.2981720610431" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -409.2981720610431 L 506.2 -419.2981720610431" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -395.50126464797756 L 593.0 -405.50126464797756" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -395.50126464797756 L 583.0 -405.50126464797756" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -401.1314177151797 L 669.8 -411.1314177151797" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -401.1314177151797 L 659.8 -411.1314177151797" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 357.6 -368.10817392183304 L 434.4 -355.5151286816648 L 511.2 -353.79171557940634 L 588.0 -354.34411749165514 L 664.8 -356.1044247746951" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 352.6 -363.10817392183304 L 362.6 -373.10817392183304" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -363.10817392183304 L 352.6 -373.10817392183304" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -350.5151286816648 L 439.4 -360.5151286816648" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -350.5151286816648 L 429.4 -360.5151286816648" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -348.79171557940634 L 516.2 -358.79171557940634" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -348.79171557940634 L 506.2 -358.79171557940634" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -349.34411749165514 L 593.0 -359.34411749165514" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -349.34411749165514 L 583.0 -359.34411749165514" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -351.1044247746951 L 669.8 -361.1044247746951" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -351.1044247746951 L 659.8 -361.1044247746951" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 299.0 -228.66666666666666 L 299.0 -244.66666666666666 L 315.0 -244.66666666666666 L 315.0 -228.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -218.66666666666669 L 314 -218.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -213.66666666666669 L 312.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -213.66666666666669 L 302.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-214.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-200.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -167.66666666666669 L 312.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -167.66666666666669 L 302.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 357.6 -430.69209183524026 M 361.6 -430.69209183524026 L 361.6 -430.692 M 361.6 -430.692 A 4 4 0 1 0 353.6 -430.692 A 4 4 0 1 0 361.6 -430.692 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 434.4 -462.4399257163278 M 438.4 -462.4399257163278 L 438.4 -462.44 M 438.4 -462.44 A 4 4 0 1 0 430.4 -462.44 A 4 4 0 1 0 438.4 -462.44 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 511.2 -482.7841614088121 M 515.2 -482.7841614088121 L 515.2 -482.784 M 515.2 -482.784 A 4 4 0 1 0 507.2 -482.784 A 4 4 0 1 0 515.2 -482.784 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 588.0 -500.8572148309578 M 592.0 -500.8572148309578 L 592 -500.857 M 592 -500.857 A 4 4 0 1 0 584 -500.857 A 4 4 0 1 0 592 -500.857 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 350.45714285714286 -365.1721822879137 L 357.6 -372.3150394307708 L 364.74285714285713 -365.1721822879137 L 357.6 -358.02932514505653 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 427.25714285714287 -363.7732824829962 L 434.4 -370.9161396258533 L 441.54285714285714 -363.7732824829962 L 434.4 -356.630425340139 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 504.0571428571428 -366.8693181485322 L 511.2 -374.0121752913893 L 518.3428571428572 -366.8693181485322 L 511.2 -359.72646100567505 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 580.8571428571429 -368.9134079685056 L 588.0 -376.05626511136273 L 595.1428571428571 -368.9134079685056 L 588.0 -361.77055082564846 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 657.6571428571428 -372.0042883003216 L 664.8 -379.1471454431788 L 671.9428571428572 -372.0042883003216 L 664.8 -364.8614311574645 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.5004867321942">
+ 1.71e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 3.41e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 5.12e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 6.83e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 8.53e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 357.6 -430.69209183524026 L 434.4 -462.4399257163278 L 511.2 -482.7841614088121 L 588.0 -500.8572148309578 L 664.8 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 349.6 -422.69209183524026 L 349.6 -438.69209183524026 L 365.6 -438.69209183524026 L 365.6 -422.69209183524026 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 357.6 -430.69209183524026 M 361.6 -430.69209183524026 L 361.6 -430.692 M 361.6 -430.692 A 4 4 0 1 0 353.6 -430.692 A 4 4 0 1 0 361.6 -430.692 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 426.4 -454.4399257163278 L 426.4 -470.4399257163278 L 442.4 -470.4399257163278 L 442.4 -454.4399257163278 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 434.4 -462.4399257163278 M 438.4 -462.4399257163278 L 438.4 -462.44 M 438.4 -462.44 A 4 4 0 1 0 430.4 -462.44 A 4 4 0 1 0 438.4 -462.44 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 503.2 -474.7841614088121 L 503.2 -490.7841614088121 L 519.2 -490.7841614088121 L 519.2 -474.7841614088121 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 511.2 -482.7841614088121 M 515.2 -482.7841614088121 L 515.2 -482.784 M 515.2 -482.784 A 4 4 0 1 0 507.2 -482.784 A 4 4 0 1 0 515.2 -482.784 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 580.0 -492.8572148309578 L 580.0 -508.8572148309578 L 596.0 -508.8572148309578 L 596.0 -492.8572148309578 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 588.0 -500.8572148309578 M 592.0 -500.8572148309578 L 592 -500.857 M 592 -500.857 A 4 4 0 1 0 584 -500.857 A 4 4 0 1 0 592 -500.857 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 656.8 -512.0 L 656.8 -528.0 L 672.8 -528.0 L 672.8 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 664.8 -520.0 M 668.8 -520.0 L 668.8 -520 M 668.8 -520 A 4 4 0 1 0 660.8 -520 A 4 4 0 1 0 668.8 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip8);">
+ <path d="M 357.6 -453.98260074869506 L 434.4 -455.4425912581944 L 511.2 -458.8961493172112 L 588.0 -454.7667270075045 L 664.8 -459.6078431372549" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip9);">
+ <path d="M 352.6 -448.98260074869506 L 362.6 -458.98260074869506" style="stroke-width:0.7;"/>
+ <path d="M 362.6 -448.98260074869506 L 352.6 -458.98260074869506" style="stroke-width:0.7;"/>
+ <path d="M 429.4 -450.4425912581944 L 439.4 -460.4425912581944" style="stroke-width:0.7;"/>
+ <path d="M 439.4 -450.4425912581944 L 429.4 -460.4425912581944" style="stroke-width:0.7;"/>
+ <path d="M 506.2 -453.8961493172112 L 516.2 -463.8961493172112" style="stroke-width:0.7;"/>
+ <path d="M 516.2 -453.8961493172112 L 506.2 -463.8961493172112" style="stroke-width:0.7;"/>
+ <path d="M 583.0 -449.7667270075045 L 593.0 -459.7667270075045" style="stroke-width:0.7;"/>
+ <path d="M 593.0 -449.7667270075045 L 583.0 -459.7667270075045" style="stroke-width:0.7;"/>
+ <path d="M 659.8 -454.6078431372549 L 669.8 -464.6078431372549" style="stroke-width:0.7;"/>
+ <path d="M 669.8 -454.6078431372549 L 659.8 -464.6078431372549" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 357.6 -365.1721822879137 L 434.4 -363.7732824829962 L 511.2 -366.8693181485322 L 588.0 -368.9134079685056 L 664.8 -372.0042883003216" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 350.45714285714286 -358.02932514505653 L 350.45714285714286 -372.3150394307708 L 364.74285714285713 -372.3150394307708 L 364.74285714285713 -358.02932514505653 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.45714285714286 -365.1721822879137 L 357.6 -372.3150394307708 L 364.74285714285713 -365.1721822879137 L 357.6 -358.02932514505653 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 427.25714285714287 -356.630425340139 L 427.25714285714287 -370.9161396258533 L 441.54285714285714 -370.9161396258533 L 441.54285714285714 -356.630425340139 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 427.25714285714287 -363.7732824829962 L 434.4 -370.9161396258533 L 441.54285714285714 -363.7732824829962 L 434.4 -356.630425340139 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 504.0571428571428 -359.72646100567505 L 504.0571428571428 -374.0121752913893 L 518.3428571428572 -374.0121752913893 L 518.3428571428572 -359.72646100567505 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 504.0571428571428 -366.8693181485322 L 511.2 -374.0121752913893 L 518.3428571428572 -366.8693181485322 L 511.2 -359.72646100567505 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 580.8571428571429 -361.77055082564846 L 580.8571428571429 -376.05626511136273 L 595.1428571428571 -376.05626511136273 L 595.1428571428571 -361.77055082564846 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 580.8571428571429 -368.9134079685056 L 588.0 -376.05626511136273 L 595.1428571428571 -368.9134079685056 L 588.0 -361.77055082564846 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 657.6571428571428 -364.8614311574645 L 657.6571428571428 -379.1471454431788 L 671.9428571428572 -379.1471454431788 L 671.9428571428572 -364.8614311574645 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 657.6571428571428 -372.0042883003216 L 664.8 -379.1471454431788 L 671.9428571428572 -372.0042883003216 L 664.8 -364.8614311574645 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 299.0 -228.66666666666666 L 299.0 -244.66666666666666 L 315.0 -244.66666666666666 L 315.0 -228.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -236.66666666666666 M 311.0 -236.66666666666666 L 311 -236.667 M 311 -236.667 A 4 4 0 1 0 303 -236.667 A 4 4 0 1 0 311 -236.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ n_mmap
+ </text>
+ <path d="M 300 -218.66666666666669 L 314 -218.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -213.66666666666669 L 312.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -213.66666666666669 L 302.0 -223.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-214.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-200.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 299.85714285714283 -165.52380952380952 L 299.85714285714283 -179.8095238095238 L 314.14285714285717 -179.8095238095238 L 314.14285714285717 -165.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 376.8 -358.99285188439524 M 380.8 -358.99285188439524 L 380.8 -358.993 M 380.8 -358.993 A 4 4 0 1 0 372.8 -358.993 A 4 4 0 1 0 380.8 -358.993 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -370.0192357928234 M 457.6 -370.0192357928234 L 457.6 -370.019 M 457.6 -370.019 A 4 4 0 1 0 449.6 -370.019 A 4 4 0 1 0 457.6 -370.019 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 530.4 -379.0749899071458 M 534.4 -379.0749899071458 L 534.4 -379.075 M 534.4 -379.075 A 4 4 0 1 0 526.4 -379.075 A 4 4 0 1 0 534.4 -379.075 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 607.2 -378.7690279987651 M 611.2 -378.7690279987651 L 611.2 -378.769 M 611.2 -378.769 A 4 4 0 1 0 603.2 -378.769 A 4 4 0 1 0 611.2 -378.769 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 684.0 -386.9343252036382 M 688.0 -386.9343252036382 L 688 -386.934 M 688 -386.934 A 4 4 0 1 0 680 -386.934 A 4 4 0 1 0 688 -386.934 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.35e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 2.69e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 4.04e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 5.39e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321943">
+ 6.74e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 376.8 -520.0 L 453.6 -427.27786815170157 L 530.4 -398.3398145289606 L 607.2 -407.08079032985825 L 684.0 -395.4777482248451" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 371.8 -515.0 L 381.8 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -515.0 L 371.8 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -422.27786815170157 L 458.6 -432.27786815170157" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -422.27786815170157 L 448.6 -432.27786815170157" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -393.3398145289606 L 535.4 -403.3398145289606" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -393.3398145289606 L 525.4 -403.3398145289606" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -402.08079032985825 L 612.2 -412.08079032985825" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -402.08079032985825 L 602.2 -412.08079032985825" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -390.4777482248451 L 689.0 -400.4777482248451" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -390.4777482248451 L 679.0 -400.4777482248451" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 376.8 -358.99285188439524 L 453.6 -370.0192357928234 L 530.4 -379.0749899071458 L 607.2 -378.7690279987651 L 684.0 -386.9343252036382" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 368.8 -350.99285188439524 L 368.8 -366.99285188439524 L 384.8 -366.99285188439524 L 384.8 -350.99285188439524 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -358.99285188439524 M 380.8 -358.99285188439524 L 380.8 -358.993 M 380.8 -358.993 A 4 4 0 1 0 372.8 -358.993 A 4 4 0 1 0 380.8 -358.993 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -362.0192357928234 L 445.6 -378.0192357928234 L 461.6 -378.0192357928234 L 461.6 -362.0192357928234 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -370.0192357928234 M 457.6 -370.0192357928234 L 457.6 -370.019 M 457.6 -370.019 A 4 4 0 1 0 449.6 -370.019 A 4 4 0 1 0 457.6 -370.019 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 522.4 -371.0749899071458 L 522.4 -387.0749899071458 L 538.4 -387.0749899071458 L 538.4 -371.0749899071458 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -379.0749899071458 M 534.4 -379.0749899071458 L 534.4 -379.075 M 534.4 -379.075 A 4 4 0 1 0 526.4 -379.075 A 4 4 0 1 0 534.4 -379.075 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 599.2 -370.7690279987651 L 599.2 -386.7690279987651 L 615.2 -386.7690279987651 L 615.2 -370.7690279987651 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -378.7690279987651 M 611.2 -378.7690279987651 L 611.2 -378.769 M 611.2 -378.769 A 4 4 0 1 0 603.2 -378.769 A 4 4 0 1 0 611.2 -378.769 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 676.0 -378.9343252036382 L 676.0 -394.9343252036382 L 692.0 -394.9343252036382 L 692.0 -378.9343252036382 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -386.9343252036382 M 688.0 -386.9343252036382 L 688 -386.934 M 688 -386.934 A 4 4 0 1 0 680 -386.934 A 4 4 0 1 0 688 -386.934 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 376.8 -369.3348215345888 L 453.6 -350.6528592462419 L 530.4 -343.34438599824267 L 607.2 -340.0725201263388 L 684.0 -338.2387078771759" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <path d="M 371.8 -364.3348215345888 L 381.8 -374.3348215345888" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -364.3348215345888 L 371.8 -374.3348215345888" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -345.6528592462419 L 458.6 -355.6528592462419" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -345.6528592462419 L 448.6 -355.6528592462419" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -338.34438599824267 L 535.4 -348.34438599824267" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -338.34438599824267 L 525.4 -348.34438599824267" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -335.0725201263388 L 612.2 -345.0725201263388" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -335.0725201263388 L 602.2 -345.0725201263388" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -333.2387078771759 L 689.0 -343.2387078771759" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -333.2387078771759 L 679.0 -343.2387078771759" style="stroke-width:0.7;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -231.66666666666666 L 312.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -231.66666666666666 L 302.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-218.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-204.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -190.66666666666669 L 314 -190.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 299.0 -182.66666666666669 L 299.0 -198.66666666666669 L 315.0 -198.66666666666669 L 315.0 -182.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ n_hash_mmap
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -167.66666666666669 L 312.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -167.66666666666669 L 302.0 -177.66666666666669" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 376.8 -444.64371384224637 M 380.8 -444.64371384224637 L 380.8 -444.644 M 380.8 -444.644 A 4 4 0 1 0 372.8 -444.644 A 4 4 0 1 0 380.8 -444.644 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -461.59898405531254 M 457.6 -461.59898405531254 L 457.6 -461.599 M 457.6 -461.599 A 4 4 0 1 0 449.6 -461.599 A 4 4 0 1 0 457.6 -461.599 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 530.4 -472.0118526880203 M 534.4 -472.0118526880203 L 534.4 -472.012 M 534.4 -472.012 A 4 4 0 1 0 526.4 -472.012 A 4 4 0 1 0 534.4 -472.012 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 607.2 -485.8504303654579 M 611.2 -485.8504303654579 L 611.2 -485.85 M 611.2 -485.85 A 4 4 0 1 0 603.2 -485.85 A 4 4 0 1 0 611.2 -485.85 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 684.0 -494.8570622266121 M 688.0 -494.8570622266121 L 688 -494.857 M 688 -494.857 A 4 4 0 1 0 680 -494.857 A 4 4 0 1 0 688 -494.857 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 369.65714285714284 -393.37914491322135 L 376.8 -400.5220020560785 L 383.9428571428571 -393.37914491322135 L 376.8 -386.23628777036424 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 446.45714285714286 -387.7556088612953 L 453.6 -394.89846600415245 L 460.74285714285713 -387.7556088612953 L 453.6 -380.6127517184382 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 523.2571428571429 -386.8251728517003 L 530.4 -393.96802999455747 L 537.5428571428572 -386.8251728517003 L 530.4 -379.68231570884313 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 600.0571428571428 -388.1896430083251 L 607.2 -395.3325001511822 L 614.3428571428572 -388.1896430083251 L 607.2 -381.046785865468 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 676.8571428571429 -387.7976576830817 L 684.0 -394.94051482593886 L 691.1428571428571 -387.7976576830817 L 684.0 -380.6548005402245 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.56e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 3.12e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 4.68e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 6.24e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321943">
+ 7.80e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 376.8 -520.0 L 453.6 -496.4732609002399 L 530.4 -485.28742768449274 L 607.2 -508.9510371102018 L 684.0 -501.5764075067024" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 371.8 -515.0 L 381.8 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -515.0 L 371.8 -525.0" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -491.4732609002399 L 458.6 -501.4732609002399" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -491.4732609002399 L 448.6 -501.4732609002399" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -480.28742768449274 L 535.4 -490.28742768449274" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -480.28742768449274 L 525.4 -490.28742768449274" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -503.9510371102018 L 612.2 -513.9510371102018" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -503.9510371102018 L 602.2 -513.9510371102018" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -496.5764075067024 L 689.0 -506.5764075067024" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -496.5764075067024 L 679.0 -506.5764075067024" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 376.8 -444.64371384224637 L 453.6 -461.59898405531254 L 530.4 -472.0118526880203 L 607.2 -485.8504303654579 L 684.0 -494.8570622266121" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 368.8 -436.64371384224637 L 368.8 -452.64371384224637 L 384.8 -452.64371384224637 L 384.8 -436.64371384224637 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -444.64371384224637 M 380.8 -444.64371384224637 L 380.8 -444.644 M 380.8 -444.644 A 4 4 0 1 0 372.8 -444.644 A 4 4 0 1 0 380.8 -444.644 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -453.59898405531254 L 445.6 -469.59898405531254 L 461.6 -469.59898405531254 L 461.6 -453.59898405531254 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -461.59898405531254 M 457.6 -461.59898405531254 L 457.6 -461.599 M 457.6 -461.599 A 4 4 0 1 0 449.6 -461.599 A 4 4 0 1 0 457.6 -461.599 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 522.4 -464.0118526880203 L 522.4 -480.0118526880203 L 538.4 -480.0118526880203 L 538.4 -464.0118526880203 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -472.0118526880203 M 534.4 -472.0118526880203 L 534.4 -472.012 M 534.4 -472.012 A 4 4 0 1 0 526.4 -472.012 A 4 4 0 1 0 534.4 -472.012 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 599.2 -477.8504303654579 L 599.2 -493.8504303654579 L 615.2 -493.8504303654579 L 615.2 -477.8504303654579 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -485.8504303654579 M 611.2 -485.8504303654579 L 611.2 -485.85 M 611.2 -485.85 A 4 4 0 1 0 603.2 -485.85 A 4 4 0 1 0 611.2 -485.85 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 676.0 -486.8570622266121 L 676.0 -502.8570622266121 L 692.0 -502.8570622266121 L 692.0 -486.8570622266121 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -494.8570622266121 M 688.0 -494.8570622266121 L 688 -494.857 M 688 -494.857 A 4 4 0 1 0 680 -494.857 A 4 4 0 1 0 688 -494.857 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip10);">
+ <path d="M 376.8 -393.37914491322135 L 453.6 -387.7556088612953 L 530.4 -386.8251728517003 L 607.2 -388.1896430083251 L 684.0 -387.7976576830817" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip11);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 369.65714285714284 -386.23628777036424 L 369.65714285714284 -400.5220020560785 L 383.9428571428571 -400.5220020560785 L 383.9428571428571 -386.23628777036424 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -393.37914491322135 L 376.8 -400.5220020560785 L 383.9428571428571 -393.37914491322135 L 376.8 -386.23628777036424 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 446.45714285714286 -380.6127517184382 L 446.45714285714286 -394.89846600415245 L 460.74285714285713 -394.89846600415245 L 460.74285714285713 -380.6127517184382 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -387.7556088612953 L 453.6 -394.89846600415245 L 460.74285714285713 -387.7556088612953 L 453.6 -380.6127517184382 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 523.2571428571429 -379.68231570884313 L 523.2571428571429 -393.96802999455747 L 537.5428571428572 -393.96802999455747 L 537.5428571428572 -379.68231570884313 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -386.8251728517003 L 530.4 -393.96802999455747 L 537.5428571428572 -386.8251728517003 L 530.4 -379.68231570884313 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 600.0571428571428 -381.046785865468 L 600.0571428571428 -395.3325001511822 L 614.3428571428572 -395.3325001511822 L 614.3428571428572 -381.046785865468 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -388.1896430083251 L 607.2 -395.3325001511822 L 614.3428571428572 -388.1896430083251 L 607.2 -381.046785865468 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 676.8571428571429 -380.6548005402245 L 676.8571428571429 -394.94051482593886 L 691.1428571428571 -394.94051482593886 L 691.1428571428571 -380.6548005402245 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -387.7976576830817 L 684.0 -394.94051482593886 L 691.1428571428571 -387.7976576830817 L 684.0 -380.6548005402245 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 290 -134 L 290 -246 L 324 -246 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -236.66666666666666 L 314 -236.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -231.66666666666666 L 312.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -231.66666666666666 L 302.0 -241.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-232.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-218.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-204.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </text>
+ <path d="M 300 -190.66666666666669 L 314 -190.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 299.0 -182.66666666666669 L 299.0 -198.66666666666669 L 315.0 -198.66666666666669 L 315.0 -182.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -190.66666666666669 M 311.0 -190.66666666666669 L 311 -190.667 M 311 -190.667 A 4 4 0 1 0 303 -190.667 A 4 4 0 1 0 311 -190.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-186.0">
+ n_mmap
+ </text>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 299.85714285714283 -165.52380952380952 L 299.85714285714283 -179.8095238095238 L 314.14285714285717 -179.8095238095238 L 314.14285714285717 -165.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -172.66666666666669 L 307.0 -179.8095238095238 L 314.14285714285717 -172.66666666666669 L 307.0 -165.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ rb_tree_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ mmap_
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ lu_mtf_set
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -449.79559918396075 M 342.4 -449.79559918396075 L 342.4 -449.796 M 342.4 -449.796 A 4 4 0 1 0 334.4 -449.796 A 4 4 0 1 0 342.4 -449.796 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -470.1165408951132 M 380.8 -470.1165408951132 L 380.8 -470.117 M 380.8 -470.117 A 4 4 0 1 0 372.8 -470.117 A 4 4 0 1 0 380.8 -470.117 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -479.5751903823286 M 419.2 -479.5751903823286 L 419.2 -479.575 M 419.2 -479.575 A 4 4 0 1 0 411.2 -479.575 A 4 4 0 1 0 419.2 -479.575 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -490.4298926130966 M 457.6 -490.4298926130966 L 457.6 -490.43 M 457.6 -490.43 A 4 4 0 1 0 449.6 -490.43 A 4 4 0 1 0 457.6 -490.43 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -491.9504212446209 M 496.0 -491.9504212446209 L 496 -491.95 M 496 -491.95 A 4 4 0 1 0 488 -491.95 A 4 4 0 1 0 496 -491.95 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -498.83454504890943 M 534.4 -498.83454504890943 L 534.4 -498.835 M 534.4 -498.835 A 4 4 0 1 0 526.4 -498.835 A 4 4 0 1 0 534.4 -498.835 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -504.13995027404474 M 572.8 -504.13995027404474 L 572.8 -504.14 M 572.8 -504.14 A 4 4 0 1 0 564.8 -504.14 A 4 4 0 1 0 572.8 -504.14 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -510.83331225001893 M 611.2 -510.83331225001893 L 611.2 -510.833 M 611.2 -510.833 A 4 4 0 1 0 603.2 -510.833 A 4 4 0 1 0 611.2 -510.833 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -510.3551426803716 M 649.6 -510.3551426803716 L 649.6 -510.355 M 649.6 -510.355 A 4 4 0 1 0 641.6 -510.355 A 4 4 0 1 0 649.6 -510.355 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 334.4 -425.9624410338031 L 334.4 -433.9624410338031 L 342.4 -433.9624410338031 L 342.4 -425.9624410338031 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 372.8 -433.9749438225506 L 372.8 -441.9749438225506 L 380.8 -441.9749438225506 L 380.8 -433.9749438225506 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 411.2 -438.0669621397341 L 411.2 -446.0669621397341 L 419.2 -446.0669621397341 L 419.2 -438.0669621397341 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 449.6 -443.06218964402933 L 449.6 -451.06218964402933 L 457.6 -451.06218964402933 L 457.6 -443.06218964402933 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 488.0 -448.3438128905684 L 488.0 -456.3438128905684 L 496.0 -456.3438128905684 L 496.0 -448.3438128905684 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 526.4 -450.52365892870694 L 526.4 -458.52365892870694 L 534.4 -458.52365892870694 L 534.4 -450.52365892870694 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 564.8 -452.5061651444514 L 564.8 -460.5061651444514 L 572.8 -460.5061651444514 L 572.8 -452.5061651444514 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 603.2 -454.1248576876281 L 603.2 -462.1248576876281 L 611.2 -462.1248576876281 L 611.2 -454.1248576876281 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 641.6 -458.8291354537781 L 641.6 -466.8291354537781 L 649.6 -466.8291354537781 L 649.6 -458.8291354537781 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 680.0 -459.04418526023323 L 680.0 -467.04418526023323 L 688.0 -467.04418526023323 L 688.0 -459.04418526023323 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 307.0 -180.66666666666669 M 311.0 -180.66666666666669 L 311 -180.667 M 311 -180.667 A 4 4 0 1 0 303 -180.667 A 4 4 0 1 0 311 -180.667 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 303.0 -140.66666666666666 L 303.0 -148.66666666666666 L 311.0 -148.66666666666666 L 311.0 -140.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 8.70e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.74e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.61e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.48e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.35e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -449.79559918396075 L 376.8 -470.1165408951132 L 415.2 -479.5751903823286 L 453.6 -490.4298926130966 L 492.0 -491.9504212446209 L 530.4 -498.83454504890943 L 568.8 -504.13995027404474 L 607.2 -510.83331225001893 L 645.6 -510.3551426803716 L 684.0 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -441.79559918396075 L 330.4 -457.79559918396075 L 346.4 -457.79559918396075 L 346.4 -441.79559918396075 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -449.79559918396075 M 342.4 -449.79559918396075 L 342.4 -449.796 M 342.4 -449.796 A 4 4 0 1 0 334.4 -449.796 A 4 4 0 1 0 342.4 -449.796 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -462.1165408951132 L 368.8 -478.1165408951132 L 384.8 -478.1165408951132 L 384.8 -462.1165408951132 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -470.1165408951132 M 380.8 -470.1165408951132 L 380.8 -470.117 M 380.8 -470.117 A 4 4 0 1 0 372.8 -470.117 A 4 4 0 1 0 380.8 -470.117 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -471.5751903823286 L 407.2 -487.5751903823286 L 423.2 -487.5751903823286 L 423.2 -471.5751903823286 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -479.5751903823286 M 419.2 -479.5751903823286 L 419.2 -479.575 M 419.2 -479.575 A 4 4 0 1 0 411.2 -479.575 A 4 4 0 1 0 419.2 -479.575 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -482.4298926130966 L 445.6 -498.4298926130966 L 461.6 -498.4298926130966 L 461.6 -482.4298926130966 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -490.4298926130966 M 457.6 -490.4298926130966 L 457.6 -490.43 M 457.6 -490.43 A 4 4 0 1 0 449.6 -490.43 A 4 4 0 1 0 457.6 -490.43 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -483.9504212446209 L 484.0 -499.9504212446209 L 500.0 -499.9504212446209 L 500.0 -483.9504212446209 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -491.9504212446209 M 496.0 -491.9504212446209 L 496 -491.95 M 496 -491.95 A 4 4 0 1 0 488 -491.95 A 4 4 0 1 0 496 -491.95 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -490.83454504890943 L 522.4 -506.83454504890943 L 538.4 -506.83454504890943 L 538.4 -490.83454504890943 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -498.83454504890943 M 534.4 -498.83454504890943 L 534.4 -498.835 M 534.4 -498.835 A 4 4 0 1 0 526.4 -498.835 A 4 4 0 1 0 534.4 -498.835 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -496.13995027404474 L 560.8 -512.1399502740447 L 576.8 -512.1399502740447 L 576.8 -496.13995027404474 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -504.13995027404474 M 572.8 -504.13995027404474 L 572.8 -504.14 M 572.8 -504.14 A 4 4 0 1 0 564.8 -504.14 A 4 4 0 1 0 572.8 -504.14 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -502.83331225001893 L 599.2 -518.8333122500189 L 615.2 -518.8333122500189 L 615.2 -502.83331225001893 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -510.83331225001893 M 611.2 -510.83331225001893 L 611.2 -510.833 M 611.2 -510.833 A 4 4 0 1 0 603.2 -510.833 A 4 4 0 1 0 611.2 -510.833 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -502.3551426803716 L 637.6 -518.3551426803716 L 653.6 -518.3551426803716 L 653.6 -502.3551426803716 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -510.3551426803716 M 649.6 -510.3551426803716 L 649.6 -510.355 M 649.6 -510.355 A 4 4 0 1 0 641.6 -510.355 A 4 4 0 1 0 649.6 -510.355 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -512.0 L 676.0 -528.0 L 692.0 -528.0 L 692.0 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -424.61351984783215 L 376.8 -447.20943551150805 L 415.2 -462.0028381974456 L 453.6 -471.81669936497053 L 492.0 -468.66634620028844 L 530.4 -480.18795583083977 L 568.8 -486.9455797489783 L 607.2 -488.8714140157274 L 645.6 -494.10041330962804 L 684.0 -497.95157584358174" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <path d="M 331.25714285714287 -424.61351984783215 L 345.54285714285714 -424.61351984783215" style="stroke-width:1;"/>
+ <path d="M 338.4 -417.470662704975 L 338.4 -431.7563769906893" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -447.20943551150805 L 383.9428571428571 -447.20943551150805" style="stroke-width:1;"/>
+ <path d="M 376.8 -440.0665783686509 L 376.8 -454.3522926543652" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -462.0028381974456 L 422.34285714285716 -462.0028381974456" style="stroke-width:1;"/>
+ <path d="M 415.2 -454.8599810545885 L 415.2 -469.1456953403027" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -471.81669936497053 L 460.74285714285713 -471.81669936497053" style="stroke-width:1;"/>
+ <path d="M 453.6 -464.6738422221134 L 453.6 -478.9595565078277" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -468.66634620028844 L 499.1428571428571 -468.66634620028844" style="stroke-width:1;"/>
+ <path d="M 492.0 -461.5234890574313 L 492.0 -475.80920334314555" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -480.18795583083977 L 537.5428571428572 -480.18795583083977" style="stroke-width:1;"/>
+ <path d="M 530.4 -473.0450986879826 L 530.4 -487.3308129736969" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -486.9455797489783 L 575.9428571428572 -486.9455797489783" style="stroke-width:1;"/>
+ <path d="M 568.8 -479.8027226061211 L 568.8 -494.0884368918354" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -488.8714140157274 L 614.3428571428572 -488.8714140157274" style="stroke-width:1;"/>
+ <path d="M 607.2 -481.72855687287023 L 607.2 -496.0142711585845" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -494.10041330962804 L 652.7428571428572 -494.10041330962804" style="stroke-width:1;"/>
+ <path d="M 645.6 -486.95755616677087 L 645.6 -501.24327045248515" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -497.95157584358174 L 691.1428571428571 -497.95157584358174" style="stroke-width:1;"/>
+ <path d="M 684.0 -490.8087187007246 L 684.0 -505.09443298643885" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip15);">
+ <path d="M 338.4 -429.9624410338031 L 376.8 -437.9749438225506 L 415.2 -442.0669621397341 L 453.6 -447.06218964402933 L 492.0 -452.3438128905684 L 530.4 -454.52365892870694 L 568.8 -456.5061651444514 L 607.2 -458.1248576876281 L 645.6 -462.8291354537781 L 684.0 -463.04418526023323" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip16);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 334.4 -425.9624410338031 L 334.4 -433.9624410338031 L 342.4 -433.9624410338031 L 342.4 -425.9624410338031 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -425.9624410338031 L 334.4 -433.9624410338031 L 342.4 -433.9624410338031 L 342.4 -425.9624410338031 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 372.8 -433.9749438225506 L 372.8 -441.9749438225506 L 380.8 -441.9749438225506 L 380.8 -433.9749438225506 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -433.9749438225506 L 372.8 -441.9749438225506 L 380.8 -441.9749438225506 L 380.8 -433.9749438225506 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 411.2 -438.0669621397341 L 411.2 -446.0669621397341 L 419.2 -446.0669621397341 L 419.2 -438.0669621397341 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -438.0669621397341 L 411.2 -446.0669621397341 L 419.2 -446.0669621397341 L 419.2 -438.0669621397341 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 449.6 -443.06218964402933 L 449.6 -451.06218964402933 L 457.6 -451.06218964402933 L 457.6 -443.06218964402933 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -443.06218964402933 L 449.6 -451.06218964402933 L 457.6 -451.06218964402933 L 457.6 -443.06218964402933 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 488.0 -448.3438128905684 L 488.0 -456.3438128905684 L 496.0 -456.3438128905684 L 496.0 -448.3438128905684 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -448.3438128905684 L 488.0 -456.3438128905684 L 496.0 -456.3438128905684 L 496.0 -448.3438128905684 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 526.4 -450.52365892870694 L 526.4 -458.52365892870694 L 534.4 -458.52365892870694 L 534.4 -450.52365892870694 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -450.52365892870694 L 526.4 -458.52365892870694 L 534.4 -458.52365892870694 L 534.4 -450.52365892870694 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 564.8 -452.5061651444514 L 564.8 -460.5061651444514 L 572.8 -460.5061651444514 L 572.8 -452.5061651444514 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -452.5061651444514 L 564.8 -460.5061651444514 L 572.8 -460.5061651444514 L 572.8 -452.5061651444514 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 603.2 -454.1248576876281 L 603.2 -462.1248576876281 L 611.2 -462.1248576876281 L 611.2 -454.1248576876281 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -454.1248576876281 L 603.2 -462.1248576876281 L 611.2 -462.1248576876281 L 611.2 -454.1248576876281 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip25);">
+ <path d="M 641.6 -458.8291354537781 L 641.6 -466.8291354537781 L 649.6 -466.8291354537781 L 649.6 -458.8291354537781 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -458.8291354537781 L 641.6 -466.8291354537781 L 649.6 -466.8291354537781 L 649.6 -458.8291354537781 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip26);">
+ <path d="M 680.0 -459.04418526023323 L 680.0 -467.04418526023323 L 688.0 -467.04418526023323 L 688.0 -459.04418526023323 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -459.04418526023323 L 680.0 -467.04418526023323 L 688.0 -467.04418526023323 L 688.0 -459.04418526023323 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -180.66666666666669 L 314 -180.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 299.0 -172.66666666666669 L 299.0 -188.66666666666669 L 315.0 -188.66666666666669 L 315.0 -172.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -180.66666666666669 M 311.0 -180.66666666666669 L 311 -180.667 M 311 -180.667 A 4 4 0 1 0 303 -180.667 A 4 4 0 1 0 311 -180.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-176.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -162.66666666666666 L 314 -162.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -162.66666666666666 L 314.14285714285717 -162.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -155.52380952380952 L 307.0 -169.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 303.0 -140.66666666666666 L 303.0 -148.66666666666666 L 311.0 -148.66666666666666 L 311.0 -140.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -140.66666666666666 L 303.0 -148.66666666666666 L 311.0 -148.66666666666666 L 311.0 -140.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 436.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -520.0 M 342.4 -520.0 L 342.4 -520 M 342.4 -520 A 4 4 0 1 0 334.4 -520 A 4 4 0 1 0 342.4 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -516.9002608387358 M 380.8 -516.9002608387358 L 380.8 -516.9 M 380.8 -516.9 A 4 4 0 1 0 372.8 -516.9 A 4 4 0 1 0 380.8 -516.9 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -518.7181337790383 M 419.2 -518.7181337790383 L 419.2 -518.718 M 419.2 -518.718 A 4 4 0 1 0 411.2 -518.718 A 4 4 0 1 0 419.2 -518.718 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -515.8375329213939 M 457.6 -515.8375329213939 L 457.6 -515.838 M 457.6 -515.838 A 4 4 0 1 0 449.6 -515.838 A 4 4 0 1 0 457.6 -515.838 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -512.189715863047 M 496.0 -512.189715863047 L 496 -512.19 M 496 -512.19 A 4 4 0 1 0 488 -512.19 A 4 4 0 1 0 496 -512.19 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -510.9972227849811 M 534.4 -510.9972227849811 L 534.4 -510.997 M 534.4 -510.997 A 4 4 0 1 0 526.4 -510.997 A 4 4 0 1 0 534.4 -510.997 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -512.5114591774716 M 572.8 -512.5114591774716 L 572.8 -512.511 M 572.8 -512.511 A 4 4 0 1 0 564.8 -512.511 A 4 4 0 1 0 572.8 -512.511 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -513.0985362641815 M 611.2 -513.0985362641815 L 611.2 -513.099 M 611.2 -513.099 A 4 4 0 1 0 603.2 -513.099 A 4 4 0 1 0 611.2 -513.099 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -512.4346214883847 M 649.6 -512.4346214883847 L 649.6 -512.435 M 649.6 -512.435 A 4 4 0 1 0 641.6 -512.435 A 4 4 0 1 0 649.6 -512.435 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -513.9521078133441 M 688.0 -513.9521078133441 L 688 -513.952 M 688 -513.952 A 4 4 0 1 0 680 -513.952 A 4 4 0 1 0 688 -513.952 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 334.4 -501.592585089141 L 334.4 -509.592585089141 L 342.4 -509.592585089141 L 342.4 -501.592585089141 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 372.8 -495.63708383981634 L 372.8 -503.63708383981634 L 380.8 -503.63708383981634 L 380.8 -495.63708383981634 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 411.2 -489.61751249324686 L 411.2 -497.61751249324686 L 419.2 -497.61751249324686 L 419.2 -489.61751249324686 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 449.6 -484.1618044300378 L 449.6 -492.1618044300378 L 457.6 -492.1618044300378 L 457.6 -484.1618044300378 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 488.0 -478.3941028498109 L 488.0 -486.3941028498109 L 496.0 -486.3941028498109 L 496.0 -478.3941028498109 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 526.4 -479.7713778025392 L 526.4 -487.7713778025392 L 534.4 -487.7713778025392 L 534.4 -479.7713778025392 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 564.8 -479.26578116558613 L 564.8 -487.26578116558613 L 572.8 -487.26578116558613 L 572.8 -479.26578116558613 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 603.2 -477.16911044705563 L 603.2 -485.16911044705563 L 611.2 -485.16911044705563 L 611.2 -477.16911044705563 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 641.6 -477.08716572123177 L 641.6 -485.08716572123177 L 649.6 -485.08716572123177 L 649.6 -477.08716572123177 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 680.0 -475.29784575904915 L 680.0 -483.29784575904915 L 688.0 -483.29784575904915 L 688.0 -475.29784575904915 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -449.58069540113456 M 342.4 -449.58069540113456 L 342.4 -449.581 M 342.4 -449.581 A 4 4 0 1 0 334.4 -449.581 A 4 4 0 1 0 342.4 -449.581 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -450.22928906672064 M 380.8 -450.22928906672064 L 380.8 -450.229 M 380.8 -450.229 A 4 4 0 1 0 372.8 -450.229 A 4 4 0 1 0 380.8 -450.229 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -446.89439407752565 M 419.2 -446.89439407752565 L 419.2 -446.894 M 419.2 -446.894 A 4 4 0 1 0 411.2 -446.894 A 4 4 0 1 0 419.2 -446.894 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -445.21325043895195 M 457.6 -445.21325043895195 L 457.6 -445.213 M 457.6 -445.213 A 4 4 0 1 0 449.6 -445.213 A 4 4 0 1 0 457.6 -445.213 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -446.6436850013506 M 496.0 -446.6436850013506 L 496 -446.644 M 496 -446.644 A 4 4 0 1 0 488 -446.644 A 4 4 0 1 0 496 -446.644 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -447.24422609400324 M 534.4 -447.24422609400324 L 534.4 -447.244 M 534.4 -447.244 A 4 4 0 1 0 526.4 -447.244 A 4 4 0 1 0 534.4 -447.244 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -445.75668557536466 M 572.8 -445.75668557536466 L 572.8 -445.757 M 572.8 -445.757 A 4 4 0 1 0 564.8 -445.757 A 4 4 0 1 0 572.8 -445.757 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -446.09073220556456 M 611.2 -446.09073220556456 L 611.2 -446.091 M 611.2 -446.091 A 4 4 0 1 0 603.2 -446.091 A 4 4 0 1 0 611.2 -446.091 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -446.40458282685034 M 649.6 -446.40458282685034 L 649.6 -446.405 M 649.6 -446.405 A 4 4 0 1 0 641.6 -446.405 A 4 4 0 1 0 649.6 -446.405 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -447.38931236493784 M 688.0 -447.38931236493784 L 688 -447.389 M 688 -447.389 A 4 4 0 1 0 680 -447.389 A 4 4 0 1 0 688 -447.389 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 307.0 -178.66666666666669 M 311.0 -178.66666666666669 L 311 -178.667 M 311 -178.667 A 4 4 0 1 0 303 -178.667 A 4 4 0 1 0 311 -178.667 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 303.0 -156.66666666666666 L 303.0 -164.66666666666666 L 311.0 -164.66666666666666 L 311.0 -156.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 307.0 -142.66666666666666 M 311.0 -142.66666666666666 L 311 -142.667 M 311 -142.667 A 4 4 0 1 0 303 -142.667 A 4 4 0 1 0 311 -142.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.90e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.50048673219425">
+ 3.79e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 5.69e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.50048673219425">
+ 7.58e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321943">
+ 9.48e-08
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -520.0 L 376.8 -516.9002608387358 L 415.2 -518.7181337790383 L 453.6 -515.8375329213939 L 492.0 -512.189715863047 L 530.4 -510.9972227849811 L 568.8 -512.5114591774716 L 607.2 -513.0985362641815 L 645.6 -512.4346214883847 L 684.0 -513.9521078133441" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -512.0 L 330.4 -528.0 L 346.4 -528.0 L 346.4 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -520.0 M 342.4 -520.0 L 342.4 -520 M 342.4 -520 A 4 4 0 1 0 334.4 -520 A 4 4 0 1 0 342.4 -520 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -508.9002608387358 L 368.8 -524.9002608387358 L 384.8 -524.9002608387358 L 384.8 -508.9002608387358 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -516.9002608387358 M 380.8 -516.9002608387358 L 380.8 -516.9 M 380.8 -516.9 A 4 4 0 1 0 372.8 -516.9 A 4 4 0 1 0 380.8 -516.9 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -510.71813377903834 L 407.2 -526.7181337790383 L 423.2 -526.7181337790383 L 423.2 -510.71813377903834 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -518.7181337790383 M 419.2 -518.7181337790383 L 419.2 -518.718 M 419.2 -518.718 A 4 4 0 1 0 411.2 -518.718 A 4 4 0 1 0 419.2 -518.718 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -507.83753292139386 L 445.6 -523.8375329213939 L 461.6 -523.8375329213939 L 461.6 -507.83753292139386 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -515.8375329213939 M 457.6 -515.8375329213939 L 457.6 -515.838 M 457.6 -515.838 A 4 4 0 1 0 449.6 -515.838 A 4 4 0 1 0 457.6 -515.838 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -504.189715863047 L 484.0 -520.189715863047 L 500.0 -520.189715863047 L 500.0 -504.189715863047 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -512.189715863047 M 496.0 -512.189715863047 L 496 -512.19 M 496 -512.19 A 4 4 0 1 0 488 -512.19 A 4 4 0 1 0 496 -512.19 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -502.9972227849811 L 522.4 -518.9972227849811 L 538.4 -518.9972227849811 L 538.4 -502.9972227849811 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -510.9972227849811 M 534.4 -510.9972227849811 L 534.4 -510.997 M 534.4 -510.997 A 4 4 0 1 0 526.4 -510.997 A 4 4 0 1 0 534.4 -510.997 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -504.51145917747164 L 560.8 -520.5114591774716 L 576.8 -520.5114591774716 L 576.8 -504.51145917747164 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -512.5114591774716 M 572.8 -512.5114591774716 L 572.8 -512.511 M 572.8 -512.511 A 4 4 0 1 0 564.8 -512.511 A 4 4 0 1 0 572.8 -512.511 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -505.09853626418146 L 599.2 -521.0985362641815 L 615.2 -521.0985362641815 L 615.2 -505.09853626418146 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -513.0985362641815 M 611.2 -513.0985362641815 L 611.2 -513.099 M 611.2 -513.099 A 4 4 0 1 0 603.2 -513.099 A 4 4 0 1 0 611.2 -513.099 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -504.43462148838466 L 637.6 -520.4346214883847 L 653.6 -520.4346214883847 L 653.6 -504.43462148838466 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -512.4346214883847 M 649.6 -512.4346214883847 L 649.6 -512.435 M 649.6 -512.435 A 4 4 0 1 0 641.6 -512.435 A 4 4 0 1 0 649.6 -512.435 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -505.9521078133441 L 676.0 -521.9521078133441 L 692.0 -521.9521078133441 L 692.0 -505.9521078133441 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -513.9521078133441 M 688.0 -513.9521078133441 L 688 -513.952 M 688 -513.952 A 4 4 0 1 0 680 -513.952 A 4 4 0 1 0 688 -513.952 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -505.592585089141 L 376.8 -499.63708383981634 L 415.2 -493.61751249324686 L 453.6 -488.1618044300378 L 492.0 -482.3941028498109 L 530.4 -483.7713778025392 L 568.8 -483.26578116558613 L 607.2 -481.16911044705563 L 645.6 -481.08716572123177 L 684.0 -479.29784575904915" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 334.4 -501.592585089141 L 334.4 -509.592585089141 L 342.4 -509.592585089141 L 342.4 -501.592585089141 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -501.592585089141 L 334.4 -509.592585089141 L 342.4 -509.592585089141 L 342.4 -501.592585089141 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 372.8 -495.63708383981634 L 372.8 -503.63708383981634 L 380.8 -503.63708383981634 L 380.8 -495.63708383981634 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -495.63708383981634 L 372.8 -503.63708383981634 L 380.8 -503.63708383981634 L 380.8 -495.63708383981634 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 411.2 -489.61751249324686 L 411.2 -497.61751249324686 L 419.2 -497.61751249324686 L 419.2 -489.61751249324686 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -489.61751249324686 L 411.2 -497.61751249324686 L 419.2 -497.61751249324686 L 419.2 -489.61751249324686 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 449.6 -484.1618044300378 L 449.6 -492.1618044300378 L 457.6 -492.1618044300378 L 457.6 -484.1618044300378 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -484.1618044300378 L 449.6 -492.1618044300378 L 457.6 -492.1618044300378 L 457.6 -484.1618044300378 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 488.0 -478.3941028498109 L 488.0 -486.3941028498109 L 496.0 -486.3941028498109 L 496.0 -478.3941028498109 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -478.3941028498109 L 488.0 -486.3941028498109 L 496.0 -486.3941028498109 L 496.0 -478.3941028498109 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 526.4 -479.7713778025392 L 526.4 -487.7713778025392 L 534.4 -487.7713778025392 L 534.4 -479.7713778025392 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -479.7713778025392 L 526.4 -487.7713778025392 L 534.4 -487.7713778025392 L 534.4 -479.7713778025392 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 564.8 -479.26578116558613 L 564.8 -487.26578116558613 L 572.8 -487.26578116558613 L 572.8 -479.26578116558613 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -479.26578116558613 L 564.8 -487.26578116558613 L 572.8 -487.26578116558613 L 572.8 -479.26578116558613 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 603.2 -477.16911044705563 L 603.2 -485.16911044705563 L 611.2 -485.16911044705563 L 611.2 -477.16911044705563 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -477.16911044705563 L 603.2 -485.16911044705563 L 611.2 -485.16911044705563 L 611.2 -477.16911044705563 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 641.6 -477.08716572123177 L 641.6 -485.08716572123177 L 649.6 -485.08716572123177 L 649.6 -477.08716572123177 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -477.08716572123177 L 641.6 -485.08716572123177 L 649.6 -485.08716572123177 L 649.6 -477.08716572123177 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 680.0 -475.29784575904915 L 680.0 -483.29784575904915 L 688.0 -483.29784575904915 L 688.0 -475.29784575904915 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -475.29784575904915 L 680.0 -483.29784575904915 L 688.0 -483.29784575904915 L 688.0 -475.29784575904915 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -449.58069540113456 L 376.8 -450.22928906672064 L 415.2 -446.89439407752565 L 453.6 -445.21325043895195 L 492.0 -446.6436850013506 L 530.4 -447.24422609400324 L 568.8 -445.75668557536466 L 607.2 -446.09073220556456 L 645.6 -446.40458282685034 L 684.0 -447.38931236493784" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 330.4 -441.58069540113456 L 330.4 -457.58069540113456 L 346.4 -457.58069540113456 L 346.4 -441.58069540113456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -449.58069540113456 M 342.4 -449.58069540113456 L 342.4 -449.581 M 342.4 -449.581 A 4 4 0 1 0 334.4 -449.581 A 4 4 0 1 0 342.4 -449.581 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 368.8 -442.22928906672064 L 368.8 -458.22928906672064 L 384.8 -458.22928906672064 L 384.8 -442.22928906672064 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -450.22928906672064 M 380.8 -450.22928906672064 L 380.8 -450.229 M 380.8 -450.229 A 4 4 0 1 0 372.8 -450.229 A 4 4 0 1 0 380.8 -450.229 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 407.2 -438.89439407752565 L 407.2 -454.89439407752565 L 423.2 -454.89439407752565 L 423.2 -438.89439407752565 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -446.89439407752565 M 419.2 -446.89439407752565 L 419.2 -446.894 M 419.2 -446.894 A 4 4 0 1 0 411.2 -446.894 A 4 4 0 1 0 419.2 -446.894 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 445.6 -437.21325043895195 L 445.6 -453.21325043895195 L 461.6 -453.21325043895195 L 461.6 -437.21325043895195 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -445.21325043895195 M 457.6 -445.21325043895195 L 457.6 -445.213 M 457.6 -445.213 A 4 4 0 1 0 449.6 -445.213 A 4 4 0 1 0 457.6 -445.213 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 484.0 -438.6436850013506 L 484.0 -454.6436850013506 L 500.0 -454.6436850013506 L 500.0 -438.6436850013506 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -446.6436850013506 M 496.0 -446.6436850013506 L 496 -446.644 M 496 -446.644 A 4 4 0 1 0 488 -446.644 A 4 4 0 1 0 496 -446.644 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 522.4 -439.24422609400324 L 522.4 -455.24422609400324 L 538.4 -455.24422609400324 L 538.4 -439.24422609400324 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -447.24422609400324 M 534.4 -447.24422609400324 L 534.4 -447.244 M 534.4 -447.244 A 4 4 0 1 0 526.4 -447.244 A 4 4 0 1 0 534.4 -447.244 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 560.8 -437.75668557536466 L 560.8 -453.75668557536466 L 576.8 -453.75668557536466 L 576.8 -437.75668557536466 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -445.75668557536466 M 572.8 -445.75668557536466 L 572.8 -445.757 M 572.8 -445.757 A 4 4 0 1 0 564.8 -445.757 A 4 4 0 1 0 572.8 -445.757 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 599.2 -438.09073220556456 L 599.2 -454.09073220556456 L 615.2 -454.09073220556456 L 615.2 -438.09073220556456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -446.09073220556456 M 611.2 -446.09073220556456 L 611.2 -446.091 M 611.2 -446.091 A 4 4 0 1 0 603.2 -446.091 A 4 4 0 1 0 611.2 -446.091 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 637.6 -438.40458282685034 L 637.6 -454.40458282685034 L 653.6 -454.40458282685034 L 653.6 -438.40458282685034 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -446.40458282685034 M 649.6 -446.40458282685034 L 649.6 -446.405 M 649.6 -446.405 A 4 4 0 1 0 641.6 -446.405 A 4 4 0 1 0 649.6 -446.405 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 676.0 -439.38931236493784 L 676.0 -455.38931236493784 L 692.0 -455.38931236493784 L 692.0 -439.38931236493784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -447.38931236493784 M 688.0 -447.38931236493784 L 688 -447.389 M 688 -447.389 A 4 4 0 1 0 680 -447.389 A 4 4 0 1 0 688 -447.389 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -441.01665906942196 L 376.8 -441.36695536196646 L 415.2 -440.65568442733655 L 453.6 -440.8198060170178 L 492.0 -440.96187449351703 L 530.4 -442.1666708873582 L 568.8 -441.3024209886548 L 607.2 -441.1489777485143 L 645.6 -441.4024724810913 L 684.0 -441.24810068881686" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 331.25714285714287 -441.01665906942196 L 345.54285714285714 -441.01665906942196" style="stroke-width:1;"/>
+ <path d="M 338.4 -433.8738019265648 L 338.4 -448.1595162122791" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -441.36695536196646 L 383.9428571428571 -441.36695536196646" style="stroke-width:1;"/>
+ <path d="M 376.8 -434.22409821910935 L 376.8 -448.5098125048236" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -440.65568442733655 L 422.34285714285716 -440.65568442733655" style="stroke-width:1;"/>
+ <path d="M 415.2 -433.5128272844794 L 415.2 -447.7985415701937" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -440.8198060170178 L 460.74285714285713 -440.8198060170178" style="stroke-width:1;"/>
+ <path d="M 453.6 -433.67694887416064 L 453.6 -447.962663159875" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -440.96187449351703 L 499.1428571428571 -440.96187449351703" style="stroke-width:1;"/>
+ <path d="M 492.0 -433.81901735065986 L 492.0 -448.10473163637414" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -442.1666708873582 L 537.5428571428572 -442.1666708873582" style="stroke-width:1;"/>
+ <path d="M 530.4 -435.023813744501 L 530.4 -449.30952803021535" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -441.3024209886548 L 575.9428571428572 -441.3024209886548" style="stroke-width:1;"/>
+ <path d="M 568.8 -434.1595638457976 L 568.8 -448.44527813151194" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -441.1489777485143 L 614.3428571428572 -441.1489777485143" style="stroke-width:1;"/>
+ <path d="M 607.2 -434.0061206056572 L 607.2 -448.2918348913714" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -441.4024724810913 L 652.7428571428572 -441.4024724810913" style="stroke-width:1;"/>
+ <path d="M 645.6 -434.25961533823414 L 645.6 -448.5453296239484" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -441.24810068881686 L 691.1428571428571 -441.24810068881686" style="stroke-width:1;"/>
+ <path d="M 684.0 -434.1052435459597 L 684.0 -448.390957831674" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -178.66666666666669 L 314 -178.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 299.0 -170.66666666666669 L 299.0 -186.66666666666669 L 315.0 -186.66666666666669 L 315.0 -170.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -178.66666666666669 M 311.0 -178.66666666666669 L 311 -178.667 M 311 -178.667 A 4 4 0 1 0 303 -178.667 A 4 4 0 1 0 311 -178.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-174.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -160.66666666666666 L 314 -160.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 303.0 -156.66666666666666 L 303.0 -164.66666666666666 L 311.0 -164.66666666666666 L 311.0 -156.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -156.66666666666666 L 303.0 -164.66666666666666 L 311.0 -164.66666666666666 L 311.0 -156.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-156.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -142.66666666666666 L 314 -142.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 299.0 -134.66666666666666 L 299.0 -150.66666666666666 L 315.0 -150.66666666666666 L 315.0 -134.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -142.66666666666666 M 311.0 -142.66666666666666 L 311 -142.667 M 311 -142.667 A 4 4 0 1 0 303 -142.667 A 4 4 0 1 0 311 -142.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-138.0">
+ thin_heap
+ </text>
+ <path d="M 300 -124.66666666666666 L 314 -124.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -124.66666666666666 L 314.14285714285717 -124.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -117.52380952380952 L 307.0 -131.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-120.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 496.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -321.02504776119406 L 332.15 -331.02504776119406 L 344.65 -331.02504776119406 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -343.4118208955224 L 370.55 -353.4118208955224 L 383.05 -353.4118208955224 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -364.1597910447761 L 408.95 -374.1597910447761 L 421.45 -374.1597910447761 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -387.35074626865674 L 447.35 -397.35074626865674 L 459.85 -397.35074626865674 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -411.7497313432836 L 485.75 -421.7497313432836 L 498.25 -421.7497313432836 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -433.88895522388054 L 524.15 -443.88895522388054 L 536.65 -443.88895522388054 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -456.57292537313435 L 562.55 -466.57292537313435 L 575.05 -466.57292537313435 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -475.0210746268657 L 600.95 -485.0210746268657 L 613.45 -485.0210746268657 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -489.582776119403 L 639.35 -499.582776119403 L 651.85 -499.582776119403 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -306.26225074626865 M 342.4 -306.26225074626865 L 342.4 -306.262 M 342.4 -306.262 A 4 4 0 1 0 334.4 -306.262 A 4 4 0 1 0 342.4 -306.262 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -306.9955074626866 M 380.8 -306.9955074626866 L 380.8 -306.996 M 380.8 -306.996 A 4 4 0 1 0 372.8 -306.996 A 4 4 0 1 0 380.8 -306.996 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -307.3151313432836 M 419.2 -307.3151313432836 L 419.2 -307.315 M 419.2 -307.315 A 4 4 0 1 0 411.2 -307.315 A 4 4 0 1 0 419.2 -307.315 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -307.47221791044774 M 457.6 -307.47221791044774 L 457.6 -307.472 M 457.6 -307.472 A 4 4 0 1 0 449.6 -307.472 A 4 4 0 1 0 457.6 -307.472 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -307.7432776119403 M 496.0 -307.7432776119403 L 496 -307.743 M 496 -307.743 A 4 4 0 1 0 488 -307.743 A 4 4 0 1 0 496 -307.743 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -307.7981462686567 M 534.4 -307.7981462686567 L 534.4 -307.798 M 534.4 -307.798 A 4 4 0 1 0 526.4 -307.798 A 4 4 0 1 0 534.4 -307.798 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -308.05111343283585 M 572.8 -308.05111343283585 L 572.8 -308.051 M 572.8 -308.051 A 4 4 0 1 0 564.8 -308.051 A 4 4 0 1 0 572.8 -308.051 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -308.14745373134326 M 611.2 -308.14745373134326 L 611.2 -308.147 M 611.2 -308.147 A 4 4 0 1 0 603.2 -308.147 A 4 4 0 1 0 611.2 -308.147 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -308.2637253731343 M 649.6 -308.2637253731343 L 649.6 -308.264 M 649.6 -308.264 A 4 4 0 1 0 641.6 -308.264 A 4 4 0 1 0 649.6 -308.264 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -308.52375223880597 M 688.0 -308.52375223880597 L 688 -308.524 M 688 -308.524 A 4 4 0 1 0 680 -308.524 A 4 4 0 1 0 688 -308.524 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 331.25714285714287 -305.86119402985076 L 338.4 -313.0040511727079 L 345.54285714285714 -305.86119402985076 L 338.4 -298.7183368869936 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 369.65714285714284 -306.49853731343285 L 376.8 -313.64139445628996 L 383.9428571428571 -306.49853731343285 L 376.8 -299.3556801705757 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 408.0571428571429 -306.9167671641791 L 415.2 -314.05962430703624 L 422.34285714285716 -306.9167671641791 L 415.2 -299.77391002132197 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 446.45714285714286 -307.2293313432836 L 453.6 -314.3721884861407 L 460.74285714285713 -307.2293313432836 L 453.6 -300.08647420042644 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 484.8571428571429 -307.4307462686567 L 492.0 -314.5736034115139 L 499.1428571428571 -307.4307462686567 L 492.0 -300.28788912579955 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 523.2571428571429 -307.74285074626863 L 530.4 -314.8857078891258 L 537.5428571428572 -307.74285074626863 L 530.4 -300.5999936034115 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 561.6571428571428 -307.778576119403 L 568.8 -314.9214332622601 L 575.9428571428572 -307.778576119403 L 568.8 -300.63571897654583 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 600.0571428571428 -307.9134 L 607.2 -315.05625714285713 L 614.3428571428572 -307.9134 L 607.2 -300.77054285714286 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 638.4571428571428 -308.0873313432836 L 645.6 -315.2301884861407 L 652.7428571428572 -308.0873313432836 L 645.6 -300.94447420042644 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 676.8571428571429 -308.1681074626866 L 684.0 -315.3109646055437 L 691.1428571428571 -308.1681074626866 L 684.0 -301.0252503198294 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 332.15 -300.20549552238805 L 344.65 -300.20549552238805 L 338.4 -310.20549552238805 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 370.55 -301.03282686567167 L 383.05 -301.03282686567167 L 376.8 -311.03282686567167 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 408.95 -301.3192208955224 L 421.45 -301.3192208955224 L 415.2 -311.3192208955224 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 447.35 -301.5062537313433 L 459.85 -301.5062537313433 L 453.6 -311.5062537313433 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 485.75 -301.6776895522388 L 498.25 -301.6776895522388 L 492.0 -311.6776895522388 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 524.15 -301.90097313432835 L 536.65 -301.90097313432835 L 530.4 -311.90097313432835 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 562.55 -302.04771641791046 L 575.05 -302.04771641791046 L 568.8 -312.04771641791046 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 600.95 -301.84078507462687 L 613.45 -301.84078507462687 L 607.2 -311.84078507462687 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 639.35 -302.10731343283584 L 651.85 -302.10731343283584 L 645.6 -312.10731343283584 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 677.75 -302.334471641791 L 690.25 -302.334471641791 L 684.0 -312.334471641791 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 338.4 -303.04280358208956 M 342.4 -303.04280358208956 L 342.4 -303.043 M 342.4 -303.043 A 4 4 0 1 0 334.4 -303.043 A 4 4 0 1 0 342.4 -303.043 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 376.8 -303.54012835820896 M 380.8 -303.54012835820896 L 380.8 -303.54 M 380.8 -303.54 A 4 4 0 1 0 372.8 -303.54 A 4 4 0 1 0 380.8 -303.54 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 415.2 -303.8069194029851 M 419.2 -303.8069194029851 L 419.2 -303.807 M 419.2 -303.807 A 4 4 0 1 0 411.2 -303.807 A 4 4 0 1 0 419.2 -303.807 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 453.6 -304.06169253731343 M 457.6 -304.06169253731343 L 457.6 -304.062 M 457.6 -304.062 A 4 4 0 1 0 449.6 -304.062 A 4 4 0 1 0 457.6 -304.062 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 492.0 -304.2643880597015 M 496.0 -304.2643880597015 L 496 -304.264 M 496 -304.264 A 4 4 0 1 0 488 -304.264 A 4 4 0 1 0 496 -304.264 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 530.4 -304.34335820895524 M 534.4 -304.34335820895524 L 534.4 -304.343 M 534.4 -304.343 A 4 4 0 1 0 526.4 -304.343 A 4 4 0 1 0 534.4 -304.343 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 568.8 -304.491447761194 M 572.8 -304.491447761194 L 572.8 -304.491 M 572.8 -304.491 A 4 4 0 1 0 564.8 -304.491 A 4 4 0 1 0 572.8 -304.491 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 607.2 -304.52195223880597 M 611.2 -304.52195223880597 L 611.2 -304.522 M 611.2 -304.522 A 4 4 0 1 0 603.2 -304.522 A 4 4 0 1 0 611.2 -304.522 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 645.6 -304.63136119402986 M 649.6 -304.63136119402986 L 649.6 -304.631 M 649.6 -304.631 A 4 4 0 1 0 641.6 -304.631 A 4 4 0 1 0 649.6 -304.631 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 684.0 -304.7444149253731 M 688.0 -304.7444149253731 L 688 -304.744 M 688 -304.744 A 4 4 0 1 0 680 -304.744 A 4 4 0 1 0 688 -304.744 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 334.4 -298.0063671641791 L 334.4 -306.0063671641791 L 342.4 -306.0063671641791 L 342.4 -298.0063671641791 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 372.8 -298.26110417910445 L 372.8 -306.26110417910445 L 380.8 -306.26110417910445 L 380.8 -298.26110417910445 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 411.2 -298.29905910447764 L 411.2 -306.29905910447764 L 419.2 -306.29905910447764 L 419.2 -298.29905910447764 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 449.6 -298.39367552238804 L 449.6 -306.39367552238804 L 457.6 -306.39367552238804 L 457.6 -298.39367552238804 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 488.0 -298.4131307462687 L 488.0 -306.4131307462687 L 496.0 -306.4131307462687 L 496.0 -298.4131307462687 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 526.4 -298.47982686567167 L 526.4 -306.47982686567167 L 534.4 -306.47982686567167 L 534.4 -298.47982686567167 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 564.8 -298.5213182089552 L 564.8 -306.5213182089552 L 572.8 -306.5213182089552 L 572.8 -298.5213182089552 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 603.2 -298.5637913432836 L 603.2 -306.5637913432836 L 611.2 -306.5637913432836 L 611.2 -298.5637913432836 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 641.6 -298.5892029850746 L 641.6 -306.5892029850746 L 649.6 -306.5892029850746 L 649.6 -298.5892029850746 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 680.0 -298.62813970149256 L 680.0 -306.62813970149256 L 688.0 -306.62813970149256 L 688.0 -298.62813970149256 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 307.0 -154.66666666666666 M 311.0 -154.66666666666666 L 311 -154.667 M 311 -154.667 A 4 4 0 1 0 303 -154.667 A 4 4 0 1 0 311 -154.667 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 299.85714285714283 -136.66666666666666 L 307.0 -143.8095238095238 L 314.14285714285717 -136.66666666666666 L 307.0 -129.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 300.75 -113.66666666666666 L 313.25 -113.66666666666666 L 307.0 -123.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 307.0 -82.66666666666666 M 311.0 -82.66666666666666 L 311 -82.6667 M 311 -82.6667 A 4 4 0 1 0 303 -82.6667 A 4 4 0 1 0 311 -82.6667 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.34e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 2.68e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.50048673219425">
+ 4.02e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 5.36e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 6.70e-06
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -326.02504776119406 L 376.8 -348.4118208955224 L 415.2 -369.1597910447761 L 453.6 -392.35074626865674 L 492.0 -416.7497313432836 L 530.4 -438.88895522388054 L 568.8 -461.57292537313435 L 607.2 -480.0210746268657 L 645.6 -494.582776119403 L 684.0 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -321.02504776119406 L 332.15 -331.02504776119406 L 344.65 -331.02504776119406 L 344.65 -321.02504776119406 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -321.02504776119406 L 332.15 -331.02504776119406 L 344.65 -331.02504776119406 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -343.4118208955224 L 370.55 -353.4118208955224 L 383.05 -353.4118208955224 L 383.05 -343.4118208955224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -343.4118208955224 L 370.55 -353.4118208955224 L 383.05 -353.4118208955224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -364.1597910447761 L 408.95 -374.1597910447761 L 421.45 -374.1597910447761 L 421.45 -364.1597910447761 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -364.1597910447761 L 408.95 -374.1597910447761 L 421.45 -374.1597910447761 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -387.35074626865674 L 447.35 -397.35074626865674 L 459.85 -397.35074626865674 L 459.85 -387.35074626865674 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -387.35074626865674 L 447.35 -397.35074626865674 L 459.85 -397.35074626865674 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -411.7497313432836 L 485.75 -421.7497313432836 L 498.25 -421.7497313432836 L 498.25 -411.7497313432836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -411.7497313432836 L 485.75 -421.7497313432836 L 498.25 -421.7497313432836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -433.88895522388054 L 524.15 -443.88895522388054 L 536.65 -443.88895522388054 L 536.65 -433.88895522388054 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -433.88895522388054 L 524.15 -443.88895522388054 L 536.65 -443.88895522388054 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -456.57292537313435 L 562.55 -466.57292537313435 L 575.05 -466.57292537313435 L 575.05 -456.57292537313435 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -456.57292537313435 L 562.55 -466.57292537313435 L 575.05 -466.57292537313435 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -475.0210746268657 L 600.95 -485.0210746268657 L 613.45 -485.0210746268657 L 613.45 -475.0210746268657 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -475.0210746268657 L 600.95 -485.0210746268657 L 613.45 -485.0210746268657 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -489.582776119403 L 639.35 -499.582776119403 L 651.85 -499.582776119403 L 651.85 -489.582776119403 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -489.582776119403 L 639.35 -499.582776119403 L 651.85 -499.582776119403 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -306.26225074626865 L 376.8 -306.9955074626866 L 415.2 -307.3151313432836 L 453.6 -307.47221791044774 L 492.0 -307.7432776119403 L 530.4 -307.7981462686567 L 568.8 -308.05111343283585 L 607.2 -308.14745373134326 L 645.6 -308.2637253731343 L 684.0 -308.52375223880597" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -298.26225074626865 L 330.4 -314.26225074626865 L 346.4 -314.26225074626865 L 346.4 -298.26225074626865 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -306.26225074626865 M 342.4 -306.26225074626865 L 342.4 -306.262 M 342.4 -306.262 A 4 4 0 1 0 334.4 -306.262 A 4 4 0 1 0 342.4 -306.262 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -298.9955074626866 L 368.8 -314.9955074626866 L 384.8 -314.9955074626866 L 384.8 -298.9955074626866 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -306.9955074626866 M 380.8 -306.9955074626866 L 380.8 -306.996 M 380.8 -306.996 A 4 4 0 1 0 372.8 -306.996 A 4 4 0 1 0 380.8 -306.996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -299.3151313432836 L 407.2 -315.3151313432836 L 423.2 -315.3151313432836 L 423.2 -299.3151313432836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -307.3151313432836 M 419.2 -307.3151313432836 L 419.2 -307.315 M 419.2 -307.315 A 4 4 0 1 0 411.2 -307.315 A 4 4 0 1 0 419.2 -307.315 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -299.47221791044774 L 445.6 -315.47221791044774 L 461.6 -315.47221791044774 L 461.6 -299.47221791044774 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -307.47221791044774 M 457.6 -307.47221791044774 L 457.6 -307.472 M 457.6 -307.472 A 4 4 0 1 0 449.6 -307.472 A 4 4 0 1 0 457.6 -307.472 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -299.7432776119403 L 484.0 -315.7432776119403 L 500.0 -315.7432776119403 L 500.0 -299.7432776119403 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -307.7432776119403 M 496.0 -307.7432776119403 L 496 -307.743 M 496 -307.743 A 4 4 0 1 0 488 -307.743 A 4 4 0 1 0 496 -307.743 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -299.7981462686567 L 522.4 -315.7981462686567 L 538.4 -315.7981462686567 L 538.4 -299.7981462686567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -307.7981462686567 M 534.4 -307.7981462686567 L 534.4 -307.798 M 534.4 -307.798 A 4 4 0 1 0 526.4 -307.798 A 4 4 0 1 0 534.4 -307.798 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -300.05111343283585 L 560.8 -316.0511134328358 L 576.8 -316.0511134328358 L 576.8 -300.05111343283585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -308.05111343283585 M 572.8 -308.05111343283585 L 572.8 -308.051 M 572.8 -308.051 A 4 4 0 1 0 564.8 -308.051 A 4 4 0 1 0 572.8 -308.051 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -300.14745373134326 L 599.2 -316.14745373134326 L 615.2 -316.14745373134326 L 615.2 -300.14745373134326 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -308.14745373134326 M 611.2 -308.14745373134326 L 611.2 -308.147 M 611.2 -308.147 A 4 4 0 1 0 603.2 -308.147 A 4 4 0 1 0 611.2 -308.147 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -300.2637253731343 L 637.6 -316.2637253731343 L 653.6 -316.2637253731343 L 653.6 -300.2637253731343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -308.2637253731343 M 649.6 -308.2637253731343 L 649.6 -308.264 M 649.6 -308.264 A 4 4 0 1 0 641.6 -308.264 A 4 4 0 1 0 649.6 -308.264 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -300.52375223880597 L 676.0 -316.52375223880597 L 692.0 -316.52375223880597 L 692.0 -300.52375223880597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -308.52375223880597 M 688.0 -308.52375223880597 L 688 -308.524 M 688 -308.524 A 4 4 0 1 0 680 -308.524 A 4 4 0 1 0 688 -308.524 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -305.86119402985076 L 376.8 -306.49853731343285 L 415.2 -306.9167671641791 L 453.6 -307.2293313432836 L 492.0 -307.4307462686567 L 530.4 -307.74285074626863 L 568.8 -307.778576119403 L 607.2 -307.9134 L 645.6 -308.0873313432836 L 684.0 -308.1681074626866" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 331.25714285714287 -298.7183368869936 L 331.25714285714287 -313.0040511727079 L 345.54285714285714 -313.0040511727079 L 345.54285714285714 -298.7183368869936 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -305.86119402985076 L 338.4 -313.0040511727079 L 345.54285714285714 -305.86119402985076 L 338.4 -298.7183368869936 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 369.65714285714284 -299.3556801705757 L 369.65714285714284 -313.64139445628996 L 383.9428571428571 -313.64139445628996 L 383.9428571428571 -299.3556801705757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -306.49853731343285 L 376.8 -313.64139445628996 L 383.9428571428571 -306.49853731343285 L 376.8 -299.3556801705757 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.0571428571429 -299.77391002132197 L 408.0571428571429 -314.05962430703624 L 422.34285714285716 -314.05962430703624 L 422.34285714285716 -299.77391002132197 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -306.9167671641791 L 415.2 -314.05962430703624 L 422.34285714285716 -306.9167671641791 L 415.2 -299.77391002132197 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 446.45714285714286 -300.08647420042644 L 446.45714285714286 -314.3721884861407 L 460.74285714285713 -314.3721884861407 L 460.74285714285713 -300.08647420042644 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -307.2293313432836 L 453.6 -314.3721884861407 L 460.74285714285713 -307.2293313432836 L 453.6 -300.08647420042644 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 484.8571428571429 -300.28788912579955 L 484.8571428571429 -314.5736034115139 L 499.1428571428571 -314.5736034115139 L 499.1428571428571 -300.28788912579955 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -307.4307462686567 L 492.0 -314.5736034115139 L 499.1428571428571 -307.4307462686567 L 492.0 -300.28788912579955 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 523.2571428571429 -300.5999936034115 L 523.2571428571429 -314.8857078891258 L 537.5428571428572 -314.8857078891258 L 537.5428571428572 -300.5999936034115 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -307.74285074626863 L 530.4 -314.8857078891258 L 537.5428571428572 -307.74285074626863 L 530.4 -300.5999936034115 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 561.6571428571428 -300.63571897654583 L 561.6571428571428 -314.9214332622601 L 575.9428571428572 -314.9214332622601 L 575.9428571428572 -300.63571897654583 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -307.778576119403 L 568.8 -314.9214332622601 L 575.9428571428572 -307.778576119403 L 568.8 -300.63571897654583 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.0571428571428 -300.77054285714286 L 600.0571428571428 -315.05625714285713 L 614.3428571428572 -315.05625714285713 L 614.3428571428572 -300.77054285714286 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -307.9134 L 607.2 -315.05625714285713 L 614.3428571428572 -307.9134 L 607.2 -300.77054285714286 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 638.4571428571428 -300.94447420042644 L 638.4571428571428 -315.2301884861407 L 652.7428571428572 -315.2301884861407 L 652.7428571428572 -300.94447420042644 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -308.0873313432836 L 645.6 -315.2301884861407 L 652.7428571428572 -308.0873313432836 L 645.6 -300.94447420042644 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 676.8571428571429 -301.0252503198294 L 676.8571428571429 -315.3109646055437 L 691.1428571428571 -315.3109646055437 L 691.1428571428571 -301.0252503198294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -308.1681074626866 L 684.0 -315.3109646055437 L 691.1428571428571 -308.1681074626866 L 684.0 -301.0252503198294 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -305.20549552238805 L 376.8 -306.03282686567167 L 415.2 -306.3192208955224 L 453.6 -306.5062537313433 L 492.0 -306.6776895522388 L 530.4 -306.90097313432835 L 568.8 -307.04771641791046 L 607.2 -306.84078507462687 L 645.6 -307.10731343283584 L 684.0 -307.334471641791" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 332.15 -300.20549552238805 L 332.15 -310.20549552238805 L 344.65 -310.20549552238805 L 344.65 -300.20549552238805 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -300.20549552238805 L 344.65 -300.20549552238805 L 338.4 -310.20549552238805 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 370.55 -301.03282686567167 L 370.55 -311.03282686567167 L 383.05 -311.03282686567167 L 383.05 -301.03282686567167 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -301.03282686567167 L 383.05 -301.03282686567167 L 376.8 -311.03282686567167 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 408.95 -301.3192208955224 L 408.95 -311.3192208955224 L 421.45 -311.3192208955224 L 421.45 -301.3192208955224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -301.3192208955224 L 421.45 -301.3192208955224 L 415.2 -311.3192208955224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 447.35 -301.5062537313433 L 447.35 -311.5062537313433 L 459.85 -311.5062537313433 L 459.85 -301.5062537313433 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -301.5062537313433 L 459.85 -301.5062537313433 L 453.6 -311.5062537313433 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 485.75 -301.6776895522388 L 485.75 -311.6776895522388 L 498.25 -311.6776895522388 L 498.25 -301.6776895522388 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -301.6776895522388 L 498.25 -301.6776895522388 L 492.0 -311.6776895522388 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 524.15 -301.90097313432835 L 524.15 -311.90097313432835 L 536.65 -311.90097313432835 L 536.65 -301.90097313432835 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -301.90097313432835 L 536.65 -301.90097313432835 L 530.4 -311.90097313432835 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 562.55 -302.04771641791046 L 562.55 -312.04771641791046 L 575.05 -312.04771641791046 L 575.05 -302.04771641791046 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -302.04771641791046 L 575.05 -302.04771641791046 L 568.8 -312.04771641791046 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 600.95 -301.84078507462687 L 600.95 -311.84078507462687 L 613.45 -311.84078507462687 L 613.45 -301.84078507462687 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -301.84078507462687 L 613.45 -301.84078507462687 L 607.2 -311.84078507462687 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 639.35 -302.10731343283584 L 639.35 -312.10731343283584 L 651.85 -312.10731343283584 L 651.85 -302.10731343283584 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -302.10731343283584 L 651.85 -302.10731343283584 L 645.6 -312.10731343283584 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 677.75 -302.334471641791 L 677.75 -312.334471641791 L 690.25 -312.334471641791 L 690.25 -302.334471641791 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -302.334471641791 L 690.25 -302.334471641791 L 684.0 -312.334471641791 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -303.57917014925374 L 376.8 -304.0677014925373 L 415.2 -304.2686567164179 L 453.6 -304.5019552238806 L 492.0 -304.62623880597016 L 530.4 -304.7388985074627 L 568.8 -304.84902985074626 L 607.2 -304.90557313432834 L 645.6 -304.96733731343284 L 684.0 -305.0739552238806" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 331.25714285714287 -303.57917014925374 L 345.54285714285714 -303.57917014925374" style="stroke-width:1;"/>
+ <path d="M 338.4 -296.4363130063966 L 338.4 -310.72202729211085" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -304.0677014925373 L 383.9428571428571 -304.0677014925373" style="stroke-width:1;"/>
+ <path d="M 376.8 -296.92484434968014 L 376.8 -311.2105586353945" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -304.2686567164179 L 422.34285714285716 -304.2686567164179" style="stroke-width:1;"/>
+ <path d="M 415.2 -297.12579957356076 L 415.2 -311.41151385927503" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -304.5019552238806 L 460.74285714285713 -304.5019552238806" style="stroke-width:1;"/>
+ <path d="M 453.6 -297.35909808102343 L 453.6 -311.64481236673777" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -304.62623880597016 L 499.1428571428571 -304.62623880597016" style="stroke-width:1;"/>
+ <path d="M 492.0 -297.483381663113 L 492.0 -311.76909594882727" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -304.7388985074627 L 537.5428571428572 -304.7388985074627" style="stroke-width:1;"/>
+ <path d="M 530.4 -297.5960413646055 L 530.4 -311.8817556503198" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -304.84902985074626 L 575.9428571428572 -304.84902985074626" style="stroke-width:1;"/>
+ <path d="M 568.8 -297.70617270788915 L 568.8 -311.99188699360343" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -304.90557313432834 L 614.3428571428572 -304.90557313432834" style="stroke-width:1;"/>
+ <path d="M 607.2 -297.7627159914712 L 607.2 -312.0484302771855" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -304.96733731343284 L 652.7428571428572 -304.96733731343284" style="stroke-width:1;"/>
+ <path d="M 645.6 -297.82448017057567 L 645.6 -312.11019445629" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -305.0739552238806 L 691.1428571428571 -305.0739552238806" style="stroke-width:1;"/>
+ <path d="M 684.0 -297.93109808102344 L 684.0 -312.2168123667377" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip51);">
+ <path d="M 338.4 -303.04280358208956 L 376.8 -303.54012835820896 L 415.2 -303.8069194029851 L 453.6 -304.06169253731343 L 492.0 -304.2643880597015 L 530.4 -304.34335820895524 L 568.8 -304.491447761194 L 607.2 -304.52195223880597 L 645.6 -304.63136119402986 L 684.0 -304.7444149253731" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip52);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 330.4 -295.04280358208956 L 330.4 -311.04280358208956 L 346.4 -311.04280358208956 L 346.4 -295.04280358208956 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -303.04280358208956 M 342.4 -303.04280358208956 L 342.4 -303.043 M 342.4 -303.043 A 4 4 0 1 0 334.4 -303.043 A 4 4 0 1 0 342.4 -303.043 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 368.8 -295.54012835820896 L 368.8 -311.54012835820896 L 384.8 -311.54012835820896 L 384.8 -295.54012835820896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -303.54012835820896 M 380.8 -303.54012835820896 L 380.8 -303.54 M 380.8 -303.54 A 4 4 0 1 0 372.8 -303.54 A 4 4 0 1 0 380.8 -303.54 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 407.2 -295.8069194029851 L 407.2 -311.8069194029851 L 423.2 -311.8069194029851 L 423.2 -295.8069194029851 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -303.8069194029851 M 419.2 -303.8069194029851 L 419.2 -303.807 M 419.2 -303.807 A 4 4 0 1 0 411.2 -303.807 A 4 4 0 1 0 419.2 -303.807 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 445.6 -296.06169253731343 L 445.6 -312.06169253731343 L 461.6 -312.06169253731343 L 461.6 -296.06169253731343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -304.06169253731343 M 457.6 -304.06169253731343 L 457.6 -304.062 M 457.6 -304.062 A 4 4 0 1 0 449.6 -304.062 A 4 4 0 1 0 457.6 -304.062 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 484.0 -296.2643880597015 L 484.0 -312.2643880597015 L 500.0 -312.2643880597015 L 500.0 -296.2643880597015 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -304.2643880597015 M 496.0 -304.2643880597015 L 496 -304.264 M 496 -304.264 A 4 4 0 1 0 488 -304.264 A 4 4 0 1 0 496 -304.264 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 522.4 -296.34335820895524 L 522.4 -312.34335820895524 L 538.4 -312.34335820895524 L 538.4 -296.34335820895524 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -304.34335820895524 M 534.4 -304.34335820895524 L 534.4 -304.343 M 534.4 -304.343 A 4 4 0 1 0 526.4 -304.343 A 4 4 0 1 0 534.4 -304.343 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 560.8 -296.491447761194 L 560.8 -312.491447761194 L 576.8 -312.491447761194 L 576.8 -296.491447761194 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -304.491447761194 M 572.8 -304.491447761194 L 572.8 -304.491 M 572.8 -304.491 A 4 4 0 1 0 564.8 -304.491 A 4 4 0 1 0 572.8 -304.491 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 599.2 -296.52195223880597 L 599.2 -312.52195223880597 L 615.2 -312.52195223880597 L 615.2 -296.52195223880597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -304.52195223880597 M 611.2 -304.52195223880597 L 611.2 -304.522 M 611.2 -304.522 A 4 4 0 1 0 603.2 -304.522 A 4 4 0 1 0 611.2 -304.522 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip61);">
+ <path d="M 637.6 -296.63136119402986 L 637.6 -312.63136119402986 L 653.6 -312.63136119402986 L 653.6 -296.63136119402986 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -304.63136119402986 M 649.6 -304.63136119402986 L 649.6 -304.631 M 649.6 -304.631 A 4 4 0 1 0 641.6 -304.631 A 4 4 0 1 0 649.6 -304.631 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip62);">
+ <path d="M 676.0 -296.7444149253731 L 676.0 -312.7444149253731 L 692.0 -312.7444149253731 L 692.0 -296.7444149253731 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -304.7444149253731 M 688.0 -304.7444149253731 L 688 -304.744 M 688 -304.744 A 4 4 0 1 0 680 -304.744 A 4 4 0 1 0 688 -304.744 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 338.4 -302.0063671641791 L 376.8 -302.26110417910445 L 415.2 -302.29905910447764 L 453.6 -302.39367552238804 L 492.0 -302.4131307462687 L 530.4 -302.47982686567167 L 568.8 -302.5213182089552 L 607.2 -302.5637913432836 L 645.6 -302.5892029850746 L 684.0 -302.62813970149256" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 334.4 -298.0063671641791 L 334.4 -306.0063671641791 L 342.4 -306.0063671641791 L 342.4 -298.0063671641791 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -298.0063671641791 L 334.4 -306.0063671641791 L 342.4 -306.0063671641791 L 342.4 -298.0063671641791 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 372.8 -298.26110417910445 L 372.8 -306.26110417910445 L 380.8 -306.26110417910445 L 380.8 -298.26110417910445 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -298.26110417910445 L 372.8 -306.26110417910445 L 380.8 -306.26110417910445 L 380.8 -298.26110417910445 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 411.2 -298.29905910447764 L 411.2 -306.29905910447764 L 419.2 -306.29905910447764 L 419.2 -298.29905910447764 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -298.29905910447764 L 411.2 -306.29905910447764 L 419.2 -306.29905910447764 L 419.2 -298.29905910447764 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 449.6 -298.39367552238804 L 449.6 -306.39367552238804 L 457.6 -306.39367552238804 L 457.6 -298.39367552238804 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -298.39367552238804 L 449.6 -306.39367552238804 L 457.6 -306.39367552238804 L 457.6 -298.39367552238804 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 488.0 -298.4131307462687 L 488.0 -306.4131307462687 L 496.0 -306.4131307462687 L 496.0 -298.4131307462687 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -298.4131307462687 L 488.0 -306.4131307462687 L 496.0 -306.4131307462687 L 496.0 -298.4131307462687 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 526.4 -298.47982686567167 L 526.4 -306.47982686567167 L 534.4 -306.47982686567167 L 534.4 -298.47982686567167 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -298.47982686567167 L 526.4 -306.47982686567167 L 534.4 -306.47982686567167 L 534.4 -298.47982686567167 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 564.8 -298.5213182089552 L 564.8 -306.5213182089552 L 572.8 -306.5213182089552 L 572.8 -298.5213182089552 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -298.5213182089552 L 564.8 -306.5213182089552 L 572.8 -306.5213182089552 L 572.8 -298.5213182089552 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 603.2 -298.5637913432836 L 603.2 -306.5637913432836 L 611.2 -306.5637913432836 L 611.2 -298.5637913432836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -298.5637913432836 L 603.2 -306.5637913432836 L 611.2 -306.5637913432836 L 611.2 -298.5637913432836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip73);">
+ <path d="M 641.6 -298.5892029850746 L 641.6 -306.5892029850746 L 649.6 -306.5892029850746 L 649.6 -298.5892029850746 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -298.5892029850746 L 641.6 -306.5892029850746 L 649.6 -306.5892029850746 L 649.6 -298.5892029850746 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip74);">
+ <path d="M 680.0 -298.62813970149256 L 680.0 -306.62813970149256 L 688.0 -306.62813970149256 L 688.0 -298.62813970149256 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -298.62813970149256 L 680.0 -306.62813970149256 L 688.0 -306.62813970149256 L 688.0 -298.62813970149256 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 300.75 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 L 313.25 -167.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ binary_heap
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 299.0 -146.66666666666666 L 299.0 -162.66666666666666 L 315.0 -162.66666666666666 L 315.0 -146.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -154.66666666666666 M 311.0 -154.66666666666666 L 311 -154.667 M 311 -154.667 A 4 4 0 1 0 303 -154.667 A 4 4 0 1 0 311 -154.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ thin_heap
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 299.85714285714283 -129.52380952380952 L 299.85714285714283 -143.8095238095238 L 314.14285714285717 -143.8095238095238 L 314.14285714285717 -129.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -136.66666666666666 L 307.0 -143.8095238095238 L 314.14285714285717 -136.66666666666666 L 307.0 -129.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 300.75 -113.66666666666666 L 300.75 -123.66666666666666 L 313.25 -123.66666666666666 L 313.25 -113.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -113.66666666666666 L 313.25 -113.66666666666666 L 307.0 -123.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -100.66666666666666 L 314.14285714285717 -100.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -93.52380952380952 L 307.0 -107.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 299.0 -74.66666666666666 L 299.0 -90.66666666666666 L 315.0 -90.66666666666666 L 315.0 -74.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -82.66666666666666 M 311.0 -82.66666666666666 L 311 -82.6667 M 311 -82.6667 A 4 4 0 1 0 303 -82.6667 A 4 4 0 1 0 311 -82.6667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 496.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -318.3455791044776 L 332.15 -328.3455791044776 L 344.65 -328.3455791044776 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -342.1489552238806 L 370.55 -352.1489552238806 L 383.05 -352.1489552238806 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -363.5792537313433 L 408.95 -373.5792537313433 L 421.45 -373.5792537313433 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -382.68641791044774 L 447.35 -392.68641791044774 L 459.85 -392.68641791044774 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -407.67185074626866 L 485.75 -417.67185074626866 L 498.25 -417.67185074626866 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -430.44776119402985 L 524.15 -440.44776119402985 L 536.65 -440.44776119402985 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -453.8429552238806 L 562.55 -463.8429552238806 L 575.05 -463.8429552238806 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -475.14092537313434 L 600.95 -485.14092537313434 L 613.45 -485.14092537313434 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -495.07489552238803 L 639.35 -505.07489552238803 L 651.85 -505.07489552238803 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 331.25714285714287 -301.96629432835823 L 338.4 -309.10915147121534 L 345.54285714285714 -301.96629432835823 L 338.4 -294.82343718550106 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 369.65714285714284 -302.04598029850746 L 376.8 -309.1888374413646 L 383.9428571428571 -302.04598029850746 L 376.8 -294.9031231556503 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.0571428571429 -302.0232644776119 L 415.2 -309.1661216204691 L 422.34285714285716 -302.0232644776119 L 415.2 -294.8804073347548 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 446.45714285714286 -302.071336119403 L 453.6 -309.21419326226015 L 460.74285714285713 -302.071336119403 L 453.6 -294.9284789765458 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 484.8571428571429 -302.05835611940296 L 492.0 -309.2012132622601 L 499.1428571428571 -302.05835611940296 L 492.0 -294.91549897654585 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 523.2571428571429 -302.03932119402987 L 530.4 -309.182178336887 L 537.5428571428572 -302.03932119402987 L 530.4 -294.8964640511727 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 561.6571428571428 -302.0327408955224 L 568.8 -309.1755980383795 L 575.9428571428572 -302.0327408955224 L 568.8 -294.88988375266524 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.0571428571428 -302.07033462686564 L 607.2 -309.2131917697228 L 614.3428571428572 -302.07033462686564 L 607.2 -294.92747748400853 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 638.4571428571428 -302.04808835820893 L 645.6 -309.1909455010661 L 652.7428571428572 -302.04808835820893 L 645.6 -294.9052312153518 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 676.8571428571429 -302.0746919402985 L 684.0 -309.21754908315563 L 691.1428571428571 -302.0746919402985 L 684.0 -294.93183479744135 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 332.15 -296.71984507462685 L 344.65 -296.71984507462685 L 338.4 -306.71984507462685 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 370.55 -296.76312925373134 L 383.05 -296.76312925373134 L 376.8 -306.76312925373134 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 408.95 -296.79417880597015 L 421.45 -296.79417880597015 L 415.2 -306.79417880597015 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 447.35 -296.79663164179107 L 459.85 -296.79663164179107 L 453.6 -306.79663164179107 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 485.75 -296.81042268656716 L 498.25 -296.81042268656716 L 492.0 -306.81042268656716 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 524.15 -296.80513611940296 L 536.65 -296.80513611940296 L 530.4 -306.80513611940296 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 562.55 -296.76347074626864 L 575.05 -296.76347074626864 L 568.8 -306.76347074626864 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 600.95 -296.7608241791045 L 613.45 -296.7608241791045 L 607.2 -306.7608241791045 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 639.35 -296.76252507462686 L 651.85 -296.76252507462686 L 645.6 -306.76252507462686 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 677.75 -296.76536537313433 L 690.25 -296.76536537313433 L 684.0 -306.76536537313433 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 338.4 -301.2547223880597 M 342.4 -301.2547223880597 L 342.4 -301.255 M 342.4 -301.255 A 4 4 0 1 0 334.4 -301.255 A 4 4 0 1 0 342.4 -301.255 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 376.8 -301.2413220895522 M 380.8 -301.2413220895522 L 380.8 -301.241 M 380.8 -301.241 A 4 4 0 1 0 372.8 -301.241 A 4 4 0 1 0 380.8 -301.241 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 415.2 -301.23162895522387 M 419.2 -301.23162895522387 L 419.2 -301.232 M 419.2 -301.232 A 4 4 0 1 0 411.2 -301.232 A 4 4 0 1 0 419.2 -301.232 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 453.6 -301.2340259701493 M 457.6 -301.2340259701493 L 457.6 -301.234 M 457.6 -301.234 A 4 4 0 1 0 449.6 -301.234 A 4 4 0 1 0 457.6 -301.234 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 492.0 -301.2247104477612 M 496.0 -301.2247104477612 L 496 -301.225 M 496 -301.225 A 4 4 0 1 0 488 -301.225 A 4 4 0 1 0 496 -301.225 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 530.4 -301.22501253731343 M 534.4 -301.22501253731343 L 534.4 -301.225 M 534.4 -301.225 A 4 4 0 1 0 526.4 -301.225 A 4 4 0 1 0 534.4 -301.225 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 568.8 -301.27027343283584 M 572.8 -301.27027343283584 L 572.8 -301.27 M 572.8 -301.27 A 4 4 0 1 0 564.8 -301.27 A 4 4 0 1 0 572.8 -301.27 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 607.2 -301.23494208955225 M 611.2 -301.23494208955225 L 611.2 -301.235 M 611.2 -301.235 A 4 4 0 1 0 603.2 -301.235 A 4 4 0 1 0 611.2 -301.235 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 645.6 -301.22821402985073 M 649.6 -301.22821402985073 L 649.6 -301.228 M 649.6 -301.228 A 4 4 0 1 0 641.6 -301.228 A 4 4 0 1 0 649.6 -301.228 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 684.0 -301.22880507462685 M 688.0 -301.22880507462685 L 688 -301.229 M 688 -301.229 A 4 4 0 1 0 680 -301.229 A 4 4 0 1 0 688 -301.229 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 338.4 -300.8645343283582 M 342.4 -300.8645343283582 L 342.4 -300.865 M 342.4 -300.865 A 4 4 0 1 0 334.4 -300.865 A 4 4 0 1 0 342.4 -300.865 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 376.8 -300.8930423880597 M 380.8 -300.8930423880597 L 380.8 -300.893 M 380.8 -300.893 A 4 4 0 1 0 372.8 -300.893 A 4 4 0 1 0 380.8 -300.893 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 415.2 -300.9157549253731 M 419.2 -300.9157549253731 L 419.2 -300.916 M 419.2 -300.916 A 4 4 0 1 0 411.2 -300.916 A 4 4 0 1 0 419.2 -300.916 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 453.6 -300.9447653731343 M 457.6 -300.9447653731343 L 457.6 -300.945 M 457.6 -300.945 A 4 4 0 1 0 449.6 -300.945 A 4 4 0 1 0 457.6 -300.945 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 492.0 -300.95871074626865 M 496.0 -300.95871074626865 L 496 -300.959 M 496 -300.959 A 4 4 0 1 0 488 -300.959 A 4 4 0 1 0 496 -300.959 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 530.4 -300.96553731343283 M 534.4 -300.96553731343283 L 534.4 -300.966 M 534.4 -300.966 A 4 4 0 1 0 526.4 -300.966 A 4 4 0 1 0 534.4 -300.966 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 568.8 -300.97034447761195 M 572.8 -300.97034447761195 L 572.8 -300.97 M 572.8 -300.97 A 4 4 0 1 0 564.8 -300.97 A 4 4 0 1 0 572.8 -300.97 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 607.2 -300.9836134328358 M 611.2 -300.9836134328358 L 611.2 -300.984 M 611.2 -300.984 A 4 4 0 1 0 603.2 -300.984 A 4 4 0 1 0 611.2 -300.984 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 645.6 -300.97012447761193 M 649.6 -300.97012447761193 L 649.6 -300.97 M 649.6 -300.97 A 4 4 0 1 0 641.6 -300.97 A 4 4 0 1 0 649.6 -300.97 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 684.0 -300.9824904477612 M 688.0 -300.9824904477612 L 688 -300.982 M 688 -300.982 A 4 4 0 1 0 680 -300.982 A 4 4 0 1 0 688 -300.982 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 334.4 -296.6776689552239 L 334.4 -304.6776689552239 L 342.4 -304.6776689552239 L 342.4 -296.6776689552239 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 372.8 -296.63155104477613 L 372.8 -304.63155104477613 L 380.8 -304.63155104477613 L 380.8 -296.63155104477613 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 411.2 -296.62003223880595 L 411.2 -304.62003223880595 L 419.2 -304.62003223880595 L 419.2 -296.62003223880595 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 449.6 -296.60298388059704 L 449.6 -304.60298388059704 L 457.6 -304.60298388059704 L 457.6 -296.60298388059704 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 488.0 -296.5816208955224 L 488.0 -304.5816208955224 L 496.0 -304.5816208955224 L 496.0 -296.5816208955224 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 526.4 -296.58382746268654 L 526.4 -304.58382746268654 L 534.4 -304.58382746268654 L 534.4 -296.58382746268654 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 564.8 -296.57985432835824 L 564.8 -304.57985432835824 L 572.8 -304.57985432835824 L 572.8 -296.57985432835824 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 603.2 -296.57130716417913 L 603.2 -304.57130716417913 L 611.2 -304.57130716417913 L 611.2 -296.57130716417913 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 641.6 -296.5609408955224 L 641.6 -304.5609408955224 L 649.6 -304.5609408955224 L 649.6 -296.5609408955224 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 680.0 -296.55760805970147 L 680.0 -304.55760805970147 L 688.0 -304.55760805970147 L 688.0 -296.55760805970147 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 299.85714285714283 -154.66666666666666 L 307.0 -161.8095238095238 L 314.14285714285717 -154.66666666666666 L 307.0 -147.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 300.75 -131.66666666666666 L 313.25 -131.66666666666666 L 307.0 -141.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 307.0 -82.66666666666666 M 311.0 -82.66666666666666 L 311 -82.6667 M 311 -82.6667 A 4 4 0 1 0 303 -82.6667 A 4 4 0 1 0 311 -82.6667 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.34e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 2.68e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.50048673219425">
+ 4.02e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 5.36e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 6.70e-06
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -323.3455791044776 L 376.8 -347.1489552238806 L 415.2 -368.5792537313433 L 453.6 -387.68641791044774 L 492.0 -412.67185074626866 L 530.4 -435.44776119402985 L 568.8 -458.8429552238806 L 607.2 -480.14092537313434 L 645.6 -500.07489552238803 L 684.0 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -318.3455791044776 L 332.15 -328.3455791044776 L 344.65 -328.3455791044776 L 344.65 -318.3455791044776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -318.3455791044776 L 332.15 -328.3455791044776 L 344.65 -328.3455791044776 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -342.1489552238806 L 370.55 -352.1489552238806 L 383.05 -352.1489552238806 L 383.05 -342.1489552238806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -342.1489552238806 L 370.55 -352.1489552238806 L 383.05 -352.1489552238806 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -363.5792537313433 L 408.95 -373.5792537313433 L 421.45 -373.5792537313433 L 421.45 -363.5792537313433 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -363.5792537313433 L 408.95 -373.5792537313433 L 421.45 -373.5792537313433 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -382.68641791044774 L 447.35 -392.68641791044774 L 459.85 -392.68641791044774 L 459.85 -382.68641791044774 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -382.68641791044774 L 447.35 -392.68641791044774 L 459.85 -392.68641791044774 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -407.67185074626866 L 485.75 -417.67185074626866 L 498.25 -417.67185074626866 L 498.25 -407.67185074626866 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -407.67185074626866 L 485.75 -417.67185074626866 L 498.25 -417.67185074626866 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -430.44776119402985 L 524.15 -440.44776119402985 L 536.65 -440.44776119402985 L 536.65 -430.44776119402985 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -430.44776119402985 L 524.15 -440.44776119402985 L 536.65 -440.44776119402985 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -453.8429552238806 L 562.55 -463.8429552238806 L 575.05 -463.8429552238806 L 575.05 -453.8429552238806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -453.8429552238806 L 562.55 -463.8429552238806 L 575.05 -463.8429552238806 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -475.14092537313434 L 600.95 -485.14092537313434 L 613.45 -485.14092537313434 L 613.45 -475.14092537313434 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -475.14092537313434 L 600.95 -485.14092537313434 L 613.45 -485.14092537313434 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -495.07489552238803 L 639.35 -505.07489552238803 L 651.85 -505.07489552238803 L 651.85 -495.07489552238803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -495.07489552238803 L 639.35 -505.07489552238803 L 651.85 -505.07489552238803 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -301.96629432835823 L 376.8 -302.04598029850746 L 415.2 -302.0232644776119 L 453.6 -302.071336119403 L 492.0 -302.05835611940296 L 530.4 -302.03932119402987 L 568.8 -302.0327408955224 L 607.2 -302.07033462686564 L 645.6 -302.04808835820893 L 684.0 -302.0746919402985" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 331.25714285714287 -294.82343718550106 L 331.25714285714287 -309.10915147121534 L 345.54285714285714 -309.10915147121534 L 345.54285714285714 -294.82343718550106 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -301.96629432835823 L 338.4 -309.10915147121534 L 345.54285714285714 -301.96629432835823 L 338.4 -294.82343718550106 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 369.65714285714284 -294.9031231556503 L 369.65714285714284 -309.1888374413646 L 383.9428571428571 -309.1888374413646 L 383.9428571428571 -294.9031231556503 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -302.04598029850746 L 376.8 -309.1888374413646 L 383.9428571428571 -302.04598029850746 L 376.8 -294.9031231556503 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.0571428571429 -294.8804073347548 L 408.0571428571429 -309.1661216204691 L 422.34285714285716 -309.1661216204691 L 422.34285714285716 -294.8804073347548 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -302.0232644776119 L 415.2 -309.1661216204691 L 422.34285714285716 -302.0232644776119 L 415.2 -294.8804073347548 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 446.45714285714286 -294.9284789765458 L 446.45714285714286 -309.21419326226015 L 460.74285714285713 -309.21419326226015 L 460.74285714285713 -294.9284789765458 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -302.071336119403 L 453.6 -309.21419326226015 L 460.74285714285713 -302.071336119403 L 453.6 -294.9284789765458 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.8571428571429 -294.91549897654585 L 484.8571428571429 -309.2012132622601 L 499.1428571428571 -309.2012132622601 L 499.1428571428571 -294.91549897654585 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -302.05835611940296 L 492.0 -309.2012132622601 L 499.1428571428571 -302.05835611940296 L 492.0 -294.91549897654585 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 523.2571428571429 -294.8964640511727 L 523.2571428571429 -309.182178336887 L 537.5428571428572 -309.182178336887 L 537.5428571428572 -294.8964640511727 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -302.03932119402987 L 530.4 -309.182178336887 L 537.5428571428572 -302.03932119402987 L 530.4 -294.8964640511727 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 561.6571428571428 -294.88988375266524 L 561.6571428571428 -309.1755980383795 L 575.9428571428572 -309.1755980383795 L 575.9428571428572 -294.88988375266524 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -302.0327408955224 L 568.8 -309.1755980383795 L 575.9428571428572 -302.0327408955224 L 568.8 -294.88988375266524 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.0571428571428 -294.92747748400853 L 600.0571428571428 -309.2131917697228 L 614.3428571428572 -309.2131917697228 L 614.3428571428572 -294.92747748400853 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -302.07033462686564 L 607.2 -309.2131917697228 L 614.3428571428572 -302.07033462686564 L 607.2 -294.92747748400853 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 638.4571428571428 -294.9052312153518 L 638.4571428571428 -309.1909455010661 L 652.7428571428572 -309.1909455010661 L 652.7428571428572 -294.9052312153518 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -302.04808835820893 L 645.6 -309.1909455010661 L 652.7428571428572 -302.04808835820893 L 645.6 -294.9052312153518 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.8571428571429 -294.93183479744135 L 676.8571428571429 -309.21754908315563 L 691.1428571428571 -309.21754908315563 L 691.1428571428571 -294.93183479744135 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -302.0746919402985 L 684.0 -309.21754908315563 L 691.1428571428571 -302.0746919402985 L 684.0 -294.93183479744135 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -301.71984507462685 L 376.8 -301.76312925373134 L 415.2 -301.79417880597015 L 453.6 -301.79663164179107 L 492.0 -301.81042268656716 L 530.4 -301.80513611940296 L 568.8 -301.76347074626864 L 607.2 -301.7608241791045 L 645.6 -301.76252507462686 L 684.0 -301.76536537313433" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -296.71984507462685 L 332.15 -306.71984507462685 L 344.65 -306.71984507462685 L 344.65 -296.71984507462685 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -296.71984507462685 L 344.65 -296.71984507462685 L 338.4 -306.71984507462685 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -296.76312925373134 L 370.55 -306.76312925373134 L 383.05 -306.76312925373134 L 383.05 -296.76312925373134 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -296.76312925373134 L 383.05 -296.76312925373134 L 376.8 -306.76312925373134 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -296.79417880597015 L 408.95 -306.79417880597015 L 421.45 -306.79417880597015 L 421.45 -296.79417880597015 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -296.79417880597015 L 421.45 -296.79417880597015 L 415.2 -306.79417880597015 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -296.79663164179107 L 447.35 -306.79663164179107 L 459.85 -306.79663164179107 L 459.85 -296.79663164179107 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -296.79663164179107 L 459.85 -296.79663164179107 L 453.6 -306.79663164179107 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -296.81042268656716 L 485.75 -306.81042268656716 L 498.25 -306.81042268656716 L 498.25 -296.81042268656716 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -296.81042268656716 L 498.25 -296.81042268656716 L 492.0 -306.81042268656716 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -296.80513611940296 L 524.15 -306.80513611940296 L 536.65 -306.80513611940296 L 536.65 -296.80513611940296 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -296.80513611940296 L 536.65 -296.80513611940296 L 530.4 -306.80513611940296 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -296.76347074626864 L 562.55 -306.76347074626864 L 575.05 -306.76347074626864 L 575.05 -296.76347074626864 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -296.76347074626864 L 575.05 -296.76347074626864 L 568.8 -306.76347074626864 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -296.7608241791045 L 600.95 -306.7608241791045 L 613.45 -306.7608241791045 L 613.45 -296.7608241791045 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -296.7608241791045 L 613.45 -296.7608241791045 L 607.2 -306.7608241791045 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -296.76252507462686 L 639.35 -306.76252507462686 L 651.85 -306.76252507462686 L 651.85 -296.76252507462686 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -296.76252507462686 L 651.85 -296.76252507462686 L 645.6 -306.76252507462686 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -296.76536537313433 L 677.75 -306.76536537313433 L 690.25 -306.76536537313433 L 690.25 -296.76536537313433 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -296.76536537313433 L 690.25 -296.76536537313433 L 684.0 -306.76536537313433 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -301.2547223880597 L 376.8 -301.2413220895522 L 415.2 -301.23162895522387 L 453.6 -301.2340259701493 L 492.0 -301.2247104477612 L 530.4 -301.22501253731343 L 568.8 -301.27027343283584 L 607.2 -301.23494208955225 L 645.6 -301.22821402985073 L 684.0 -301.22880507462685" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 330.4 -293.2547223880597 L 330.4 -309.2547223880597 L 346.4 -309.2547223880597 L 346.4 -293.2547223880597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -301.2547223880597 M 342.4 -301.2547223880597 L 342.4 -301.255 M 342.4 -301.255 A 4 4 0 1 0 334.4 -301.255 A 4 4 0 1 0 342.4 -301.255 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 368.8 -293.2413220895522 L 368.8 -309.2413220895522 L 384.8 -309.2413220895522 L 384.8 -293.2413220895522 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -301.2413220895522 M 380.8 -301.2413220895522 L 380.8 -301.241 M 380.8 -301.241 A 4 4 0 1 0 372.8 -301.241 A 4 4 0 1 0 380.8 -301.241 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 407.2 -293.23162895522387 L 407.2 -309.23162895522387 L 423.2 -309.23162895522387 L 423.2 -293.23162895522387 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -301.23162895522387 M 419.2 -301.23162895522387 L 419.2 -301.232 M 419.2 -301.232 A 4 4 0 1 0 411.2 -301.232 A 4 4 0 1 0 419.2 -301.232 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 445.6 -293.2340259701493 L 445.6 -309.2340259701493 L 461.6 -309.2340259701493 L 461.6 -293.2340259701493 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -301.2340259701493 M 457.6 -301.2340259701493 L 457.6 -301.234 M 457.6 -301.234 A 4 4 0 1 0 449.6 -301.234 A 4 4 0 1 0 457.6 -301.234 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 484.0 -293.2247104477612 L 484.0 -309.2247104477612 L 500.0 -309.2247104477612 L 500.0 -293.2247104477612 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -301.2247104477612 M 496.0 -301.2247104477612 L 496 -301.225 M 496 -301.225 A 4 4 0 1 0 488 -301.225 A 4 4 0 1 0 496 -301.225 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 522.4 -293.22501253731343 L 522.4 -309.22501253731343 L 538.4 -309.22501253731343 L 538.4 -293.22501253731343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -301.22501253731343 M 534.4 -301.22501253731343 L 534.4 -301.225 M 534.4 -301.225 A 4 4 0 1 0 526.4 -301.225 A 4 4 0 1 0 534.4 -301.225 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 560.8 -293.27027343283584 L 560.8 -309.27027343283584 L 576.8 -309.27027343283584 L 576.8 -293.27027343283584 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -301.27027343283584 M 572.8 -301.27027343283584 L 572.8 -301.27 M 572.8 -301.27 A 4 4 0 1 0 564.8 -301.27 A 4 4 0 1 0 572.8 -301.27 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 599.2 -293.23494208955225 L 599.2 -309.23494208955225 L 615.2 -309.23494208955225 L 615.2 -293.23494208955225 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -301.23494208955225 M 611.2 -301.23494208955225 L 611.2 -301.235 M 611.2 -301.235 A 4 4 0 1 0 603.2 -301.235 A 4 4 0 1 0 611.2 -301.235 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 637.6 -293.22821402985073 L 637.6 -309.22821402985073 L 653.6 -309.22821402985073 L 653.6 -293.22821402985073 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -301.22821402985073 M 649.6 -301.22821402985073 L 649.6 -301.228 M 649.6 -301.228 A 4 4 0 1 0 641.6 -301.228 A 4 4 0 1 0 649.6 -301.228 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 676.0 -293.22880507462685 L 676.0 -309.22880507462685 L 692.0 -309.22880507462685 L 692.0 -293.22880507462685 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -301.22880507462685 M 688.0 -301.22880507462685 L 688 -301.229 M 688 -301.229 A 4 4 0 1 0 680 -301.229 A 4 4 0 1 0 688 -301.229 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -301.21542119402983 L 376.8 -301.1998832835821 L 415.2 -301.22636208955225 L 453.6 -301.2011934328358 L 492.0 -301.2018337313433 L 530.4 -301.1941107462687 L 568.8 -301.1914740298507 L 607.2 -301.1974205970149 L 645.6 -301.21693820895524 L 684.0 -301.18861074626864" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 331.25714285714287 -301.21542119402983 L 345.54285714285714 -301.21542119402983" style="stroke-width:1;"/>
+ <path d="M 338.4 -294.0725640511727 L 338.4 -308.358278336887" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -301.1998832835821 L 383.9428571428571 -301.1998832835821" style="stroke-width:1;"/>
+ <path d="M 376.8 -294.05702614072493 L 376.8 -308.3427404264392" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -301.22636208955225 L 422.34285714285716 -301.22636208955225" style="stroke-width:1;"/>
+ <path d="M 415.2 -294.0835049466951 L 415.2 -308.36921923240936" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -301.2011934328358 L 460.74285714285713 -301.2011934328358" style="stroke-width:1;"/>
+ <path d="M 453.6 -294.0583362899787 L 453.6 -308.34405057569296" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -301.2018337313433 L 499.1428571428571 -301.2018337313433" style="stroke-width:1;"/>
+ <path d="M 492.0 -294.05897658848613 L 492.0 -308.3446908742004" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -301.1941107462687 L 537.5428571428572 -301.1941107462687" style="stroke-width:1;"/>
+ <path d="M 530.4 -294.0512536034115 L 530.4 -308.3369678891258" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -301.1914740298507 L 575.9428571428572 -301.1914740298507" style="stroke-width:1;"/>
+ <path d="M 568.8 -294.0486168869936 L 568.8 -308.3343311727079" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -301.1974205970149 L 614.3428571428572 -301.1974205970149" style="stroke-width:1;"/>
+ <path d="M 607.2 -294.0545634541578 L 607.2 -308.3402777398721" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -301.21693820895524 L 652.7428571428572 -301.21693820895524" style="stroke-width:1;"/>
+ <path d="M 645.6 -294.0740810660981 L 645.6 -308.35979535181235" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -301.18861074626864 L 691.1428571428571 -301.18861074626864" style="stroke-width:1;"/>
+ <path d="M 684.0 -294.0457536034115 L 684.0 -308.3314678891258" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip51);">
+ <path d="M 338.4 -300.8645343283582 L 376.8 -300.8930423880597 L 415.2 -300.9157549253731 L 453.6 -300.9447653731343 L 492.0 -300.95871074626865 L 530.4 -300.96553731343283 L 568.8 -300.97034447761195 L 607.2 -300.9836134328358 L 645.6 -300.97012447761193 L 684.0 -300.9824904477612" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip52);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 330.4 -292.8645343283582 L 330.4 -308.8645343283582 L 346.4 -308.8645343283582 L 346.4 -292.8645343283582 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -300.8645343283582 M 342.4 -300.8645343283582 L 342.4 -300.865 M 342.4 -300.865 A 4 4 0 1 0 334.4 -300.865 A 4 4 0 1 0 342.4 -300.865 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 368.8 -292.8930423880597 L 368.8 -308.8930423880597 L 384.8 -308.8930423880597 L 384.8 -292.8930423880597 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -300.8930423880597 M 380.8 -300.8930423880597 L 380.8 -300.893 M 380.8 -300.893 A 4 4 0 1 0 372.8 -300.893 A 4 4 0 1 0 380.8 -300.893 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 407.2 -292.9157549253731 L 407.2 -308.9157549253731 L 423.2 -308.9157549253731 L 423.2 -292.9157549253731 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -300.9157549253731 M 419.2 -300.9157549253731 L 419.2 -300.916 M 419.2 -300.916 A 4 4 0 1 0 411.2 -300.916 A 4 4 0 1 0 419.2 -300.916 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 445.6 -292.9447653731343 L 445.6 -308.9447653731343 L 461.6 -308.9447653731343 L 461.6 -292.9447653731343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -300.9447653731343 M 457.6 -300.9447653731343 L 457.6 -300.945 M 457.6 -300.945 A 4 4 0 1 0 449.6 -300.945 A 4 4 0 1 0 457.6 -300.945 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 484.0 -292.95871074626865 L 484.0 -308.95871074626865 L 500.0 -308.95871074626865 L 500.0 -292.95871074626865 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -300.95871074626865 M 496.0 -300.95871074626865 L 496 -300.959 M 496 -300.959 A 4 4 0 1 0 488 -300.959 A 4 4 0 1 0 496 -300.959 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 522.4 -292.96553731343283 L 522.4 -308.96553731343283 L 538.4 -308.96553731343283 L 538.4 -292.96553731343283 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -300.96553731343283 M 534.4 -300.96553731343283 L 534.4 -300.966 M 534.4 -300.966 A 4 4 0 1 0 526.4 -300.966 A 4 4 0 1 0 534.4 -300.966 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 560.8 -292.97034447761195 L 560.8 -308.97034447761195 L 576.8 -308.97034447761195 L 576.8 -292.97034447761195 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -300.97034447761195 M 572.8 -300.97034447761195 L 572.8 -300.97 M 572.8 -300.97 A 4 4 0 1 0 564.8 -300.97 A 4 4 0 1 0 572.8 -300.97 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 599.2 -292.9836134328358 L 599.2 -308.9836134328358 L 615.2 -308.9836134328358 L 615.2 -292.9836134328358 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -300.9836134328358 M 611.2 -300.9836134328358 L 611.2 -300.984 M 611.2 -300.984 A 4 4 0 1 0 603.2 -300.984 A 4 4 0 1 0 611.2 -300.984 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip61);">
+ <path d="M 637.6 -292.97012447761193 L 637.6 -308.97012447761193 L 653.6 -308.97012447761193 L 653.6 -292.97012447761193 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -300.97012447761193 M 649.6 -300.97012447761193 L 649.6 -300.97 M 649.6 -300.97 A 4 4 0 1 0 641.6 -300.97 A 4 4 0 1 0 649.6 -300.97 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip62);">
+ <path d="M 676.0 -292.98249044776117 L 676.0 -308.98249044776117 L 692.0 -308.98249044776117 L 692.0 -292.98249044776117 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -300.9824904477612 M 688.0 -300.9824904477612 L 688 -300.982 M 688 -300.982 A 4 4 0 1 0 680 -300.982 A 4 4 0 1 0 688 -300.982 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 338.4 -300.6776689552239 L 376.8 -300.63155104477613 L 415.2 -300.62003223880595 L 453.6 -300.60298388059704 L 492.0 -300.5816208955224 L 530.4 -300.58382746268654 L 568.8 -300.5798543283582 L 607.2 -300.57130716417913 L 645.6 -300.5609408955224 L 684.0 -300.55760805970147" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 334.4 -296.6776689552239 L 334.4 -304.6776689552239 L 342.4 -304.6776689552239 L 342.4 -296.6776689552239 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -296.6776689552239 L 334.4 -304.6776689552239 L 342.4 -304.6776689552239 L 342.4 -296.6776689552239 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 372.8 -296.63155104477613 L 372.8 -304.63155104477613 L 380.8 -304.63155104477613 L 380.8 -296.63155104477613 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -296.63155104477613 L 372.8 -304.63155104477613 L 380.8 -304.63155104477613 L 380.8 -296.63155104477613 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 411.2 -296.62003223880595 L 411.2 -304.62003223880595 L 419.2 -304.62003223880595 L 419.2 -296.62003223880595 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -296.62003223880595 L 411.2 -304.62003223880595 L 419.2 -304.62003223880595 L 419.2 -296.62003223880595 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 449.6 -296.60298388059704 L 449.6 -304.60298388059704 L 457.6 -304.60298388059704 L 457.6 -296.60298388059704 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -296.60298388059704 L 449.6 -304.60298388059704 L 457.6 -304.60298388059704 L 457.6 -296.60298388059704 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 488.0 -296.5816208955224 L 488.0 -304.5816208955224 L 496.0 -304.5816208955224 L 496.0 -296.5816208955224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -296.5816208955224 L 488.0 -304.5816208955224 L 496.0 -304.5816208955224 L 496.0 -296.5816208955224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 526.4 -296.58382746268654 L 526.4 -304.58382746268654 L 534.4 -304.58382746268654 L 534.4 -296.58382746268654 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -296.58382746268654 L 526.4 -304.58382746268654 L 534.4 -304.58382746268654 L 534.4 -296.58382746268654 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 564.8 -296.57985432835824 L 564.8 -304.57985432835824 L 572.8 -304.57985432835824 L 572.8 -296.57985432835824 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -296.57985432835824 L 564.8 -304.57985432835824 L 572.8 -304.57985432835824 L 572.8 -296.57985432835824 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 603.2 -296.57130716417913 L 603.2 -304.57130716417913 L 611.2 -304.57130716417913 L 611.2 -296.57130716417913 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -296.57130716417913 L 603.2 -304.57130716417913 L 611.2 -304.57130716417913 L 611.2 -296.57130716417913 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip73);">
+ <path d="M 641.6 -296.5609408955224 L 641.6 -304.5609408955224 L 649.6 -304.5609408955224 L 649.6 -296.5609408955224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -296.5609408955224 L 641.6 -304.5609408955224 L 649.6 -304.5609408955224 L 649.6 -296.5609408955224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip74);">
+ <path d="M 680.0 -296.55760805970147 L 680.0 -304.55760805970147 L 688.0 -304.55760805970147 L 688.0 -296.55760805970147 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -296.55760805970147 L 680.0 -304.55760805970147 L 688.0 -304.55760805970147 L 688.0 -296.55760805970147 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 300.75 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 L 313.25 -167.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ binary_heap
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 299.85714285714283 -147.52380952380952 L 299.85714285714283 -161.8095238095238 L 314.14285714285717 -161.8095238095238 L 314.14285714285717 -147.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -154.66666666666666 L 307.0 -161.8095238095238 L 314.14285714285717 -154.66666666666666 L 307.0 -147.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 300.75 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 L 313.25 -131.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -131.66666666666666 L 313.25 -131.66666666666666 L 307.0 -141.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 299.0 -110.66666666666666 L 299.0 -126.66666666666666 L 315.0 -126.66666666666666 L 315.0 -110.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ thin_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -100.66666666666666 L 314.14285714285717 -100.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -93.52380952380952 L 307.0 -107.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 299.0 -74.66666666666666 L 299.0 -90.66666666666666 L 315.0 -90.66666666666666 L 315.0 -74.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -82.66666666666666 M 311.0 -82.66666666666666 L 311 -82.6667 M 311 -82.6667 A 4 4 0 1 0 303 -82.6667 A 4 4 0 1 0 311 -82.6667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="568pt" height="180pt" viewBox="0.00 0.00 568.00 180.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1) rotate(0) translate(4, 176)">
+<title>G</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-176 565,-176 565,5 -4,5"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="180,-76 180,-96 344,-96 344,-76 180,-76"/>
+<text text-anchor="middle" x="262" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::priority_queue_tag</text>
+</g>
+<!-- Node3 -->
+<g id="node5" class="node"><title>Node3</title>
+<a xlink:href="a00187.html" target="_top" xlink:title="Binary-heap (array-based).">
+<polygon fill="white" stroke="black" points="392.5,-152 392.5,-172 547.5,-172 547.5,-152 392.5,-152"/>
+<text text-anchor="middle" x="470" y="-159.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binary_heap_tag</text>
+</a>
+</g>
+<!-- Node1->Node3 -->
+<g id="edge4" class="edge"><title>Node1->Node3</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-101.033C311.786,-113.814 347.263,-131.822 380,-143 390.277,-146.509 401.444,-149.494 412.304,-151.987"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="289.867,-97.859 279.422,-96.0793 286.477,-103.984 289.867,-97.859"/>
+</g>
+<!-- Node4 -->
+<g id="node7" class="node"><title>Node4</title>
+<a xlink:href="a00188.html" target="_top" xlink:title="Binomial-heap.">
+<polygon fill="white" stroke="black" points="387.5,-114 387.5,-134 552.5,-134 552.5,-114 387.5,-114"/>
+<text text-anchor="middle" x="470" y="-121.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node1->Node4 -->
+<g id="edge6" class="edge"><title>Node1->Node4</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-97.8959C355.381,-103.06 388.126,-109.042 415.132,-113.976"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="327.388,-94.388 316.922,-96.0338 326.13,-101.274 327.388,-94.388"/>
+</g>
+<!-- Node5 -->
+<g id="node9" class="node"><title>Node5</title>
+<a xlink:href="a00349.html" target="_top" xlink:title="Pairing-heap.">
+<polygon fill="white" stroke="black" points="391,-76 391,-96 549,-96 549,-76 391,-76"/>
+<text text-anchor="middle" x="470" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::pairing_heap_tag</text>
+</a>
+</g>
+<!-- Node1->Node5 -->
+<g id="edge8" class="edge"><title>Node1->Node5</title>
+<path fill="none" stroke="midnightblue" d="M354.347,-86C366.497,-86 378.861,-86 390.766,-86"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="354.207,-82.5001 344.207,-86 354.207,-89.5001 354.207,-82.5001"/>
+</g>
+<!-- Node6 -->
+<g id="node11" class="node"><title>Node6</title>
+<a xlink:href="a00357.html" target="_top" xlink:title="Redundant-counter binomial-heap.">
+<polygon fill="white" stroke="black" points="380.5,-38 380.5,-58 559.5,-58 559.5,-38 380.5,-38"/>
+<text text-anchor="middle" x="470" y="-45.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::rc_binomial_heap_tag</text>
+</a>
+</g>
+<!-- Node1->Node6 -->
+<g id="edge10" class="edge"><title>Node1->Node6</title>
+<path fill="none" stroke="midnightblue" d="M327.114,-74.1041C355.381,-68.9399 388.126,-62.9578 415.132,-58.024"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="326.13,-70.726 316.922,-75.9662 327.388,-77.612 326.13,-70.726"/>
+</g>
+<!-- Node7 -->
+<g id="node13" class="node"><title>Node7</title>
+<a xlink:href="a00373.html" target="_top" xlink:title="Thin heap.">
+<polygon fill="white" stroke="black" points="398,-0 398,-20 542,-20 542,-0 398,-0"/>
+<text text-anchor="middle" x="470" y="-7.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::thin_heap_tag</text>
+</a>
+</g>
+<!-- Node1->Node7 -->
+<g id="edge12" class="edge"><title>Node1->Node7</title>
+<path fill="none" stroke="midnightblue" d="M288.374,-70.967C311.786,-58.1857 347.263,-40.1778 380,-29 390.277,-25.4912 401.444,-22.5058 412.304,-20.0134"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="286.477,-68.0163 279.422,-75.9207 289.867,-74.141 286.477,-68.0163"/>
+</g>
+<!-- Node2 -->
+<g id="node2" class="node"><title>Node2</title>
+<a xlink:href="a00193.html" target="_top" xlink:title="Base data structure tag.">
+<polygon fill="white" stroke="black" points="0.5,-76 0.5,-96 143.5,-96 143.5,-76 0.5,-76"/>
+<text text-anchor="middle" x="72" y="-83.9" font-family="FreeSans" font-size="9.00">__gnu_pbds::container_tag</text>
+</a>
+</g>
+<!-- Node2->Node1 -->
+<g id="edge2" class="edge"><title>Node2->Node1</title>
+<path fill="none" stroke="midnightblue" d="M153.696,-86C162.404,-86 171.265,-86 179.978,-86"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="153.56,-82.5001 143.56,-86 153.56,-89.5001 153.56,-82.5001"/>
+</g>
+</g>
+</svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 496.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -382.6171827656345 M 342.4 -382.6171827656345 L 342.4 -382.617 M 342.4 -382.617 A 4 4 0 1 0 334.4 -382.617 A 4 4 0 1 0 342.4 -382.617 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -395.255629488741 M 380.8 -395.255629488741 L 380.8 -395.256 M 380.8 -395.256 A 4 4 0 1 0 372.8 -395.256 A 4 4 0 1 0 380.8 -395.256 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -402.75559048881905 M 419.2 -402.75559048881905 L 419.2 -402.756 M 419.2 -402.756 A 4 4 0 1 0 411.2 -402.756 A 4 4 0 1 0 419.2 -402.756 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -405.1805576388847 M 457.6 -405.1805576388847 L 457.6 -405.181 M 457.6 -405.181 A 4 4 0 1 0 449.6 -405.181 A 4 4 0 1 0 457.6 -405.181 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -408.3180593638813 M 496.0 -408.3180593638813 L 496 -408.318 M 496 -408.318 A 4 4 0 1 0 488 -408.318 A 4 4 0 1 0 496 -408.318 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -412.5303029393941 M 534.4 -412.5303029393941 L 534.4 -412.53 M 534.4 -412.53 A 4 4 0 1 0 526.4 -412.53 A 4 4 0 1 0 534.4 -412.53 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -417.0708298583403 M 572.8 -417.0708298583403 L 572.8 -417.071 M 572.8 -417.071 A 4 4 0 1 0 564.8 -417.071 A 4 4 0 1 0 572.8 -417.071 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -416.9470141059718 M 611.2 -416.9470141059718 L 611.2 -416.947 M 611.2 -416.947 A 4 4 0 1 0 603.2 -416.947 A 4 4 0 1 0 611.2 -416.947 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -420.87493025013947 M 649.6 -420.87493025013947 L 649.6 -420.875 M 649.6 -420.875 A 4 4 0 1 0 641.6 -420.875 A 4 4 0 1 0 649.6 -420.875 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -422.1055637888724 M 688.0 -422.1055637888724 L 688 -422.106 M 688 -422.106 A 4 4 0 1 0 680 -422.106 A 4 4 0 1 0 688 -422.106 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 334.4 -362.49671500656996 L 334.4 -370.49671500656996 L 342.4 -370.49671500656996 L 342.4 -362.49671500656996 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 372.8 -368.4158471683057 L 372.8 -376.4158471683057 L 380.8 -376.4158471683057 L 380.8 -368.4158471683057 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 411.2 -372.05837988324026 L 411.2 -380.05837988324026 L 419.2 -380.05837988324026 L 419.2 -372.05837988324026 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 449.6 -377.13588172823654 L 449.6 -385.13588172823654 L 457.6 -385.13588172823654 L 457.6 -377.13588172823654 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 488.0 -376.4262511474977 L 488.0 -384.4262511474977 L 496.0 -384.4262511474977 L 496.0 -376.4262511474977 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 526.4 -380.32195935608127 L 526.4 -388.32195935608127 L 534.4 -388.32195935608127 L 534.4 -380.32195935608127 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 564.8 -382.01221597556804 L 564.8 -390.01221597556804 L 572.8 -390.01221597556804 L 572.8 -382.01221597556804 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 603.2 -385.05454589090823 L 603.2 -393.05454589090823 L 611.2 -393.05454589090823 L 611.2 -385.05454589090823 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 641.6 -385.747544504911 L 641.6 -393.747544504911 L 649.6 -393.747544504911 L 649.6 -385.747544504911 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 680.0 -388.61589876820244 L 680.0 -396.61589876820244 L 688.0 -396.61589876820244 L 688.0 -388.61589876820244 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -300.36429767140464 L 332.15 -310.36429767140464 L 344.65 -310.36429767140464 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -309.1025877948244 L 370.55 -319.1025877948244 L 383.05 -319.1025877948244 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -295.022 L 408.95 -305.022 L 421.45 -305.022 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -295.0164999670001 L 447.35 -305.0164999670001 L 459.85 -305.0164999670001 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -295.0131999736001 L 485.75 -305.0131999736001 L 498.25 -305.0131999736001 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -295.01099997360006 L 524.15 -305.01099997360006 L 536.65 -305.01099997360006 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -515.0 L 562.55 -525.0 L 575.05 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -404.999736000528 L 600.95 -414.999736000528 L 613.45 -414.999736000528 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -368.33324533350935 L 639.35 -378.33324533350935 L 651.85 -378.33324533350935 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -295.00659998680004 L 677.75 -305.00659998680004 L 690.25 -305.00659998680004 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 338.4 -302.65646828706343 M 342.4 -302.65646828706343 L 342.4 -302.656 M 342.4 -302.656 A 4 4 0 1 0 334.4 -302.656 A 4 4 0 1 0 342.4 -302.656 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 376.8 -302.8030671938656 M 380.8 -302.8030671938656 L 380.8 -302.803 M 380.8 -302.803 A 4 4 0 1 0 372.8 -302.803 A 4 4 0 1 0 380.8 -302.803 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 415.2 -302.6080111839776 M 419.2 -302.6080111839776 L 419.2 -302.608 M 419.2 -302.608 A 4 4 0 1 0 411.2 -302.608 A 4 4 0 1 0 419.2 -302.608 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 453.6 -303.04239591520815 M 457.6 -303.04239591520815 L 457.6 -303.042 M 457.6 -303.042 A 4 4 0 1 0 449.6 -303.042 A 4 4 0 1 0 457.6 -303.042 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 492.0 -302.87882184235633 M 496.0 -302.87882184235633 L 496 -302.879 M 496 -302.879 A 4 4 0 1 0 488 -302.879 A 4 4 0 1 0 496 -302.879 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 530.4 -303.0942058115884 M 534.4 -303.0942058115884 L 534.4 -303.094 M 534.4 -303.094 A 4 4 0 1 0 526.4 -303.094 A 4 4 0 1 0 534.4 -303.094 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 568.8 -303.08834502330996 M 572.8 -303.08834502330996 L 572.8 -303.088 M 572.8 -303.088 A 4 4 0 1 0 564.8 -303.088 A 4 4 0 1 0 572.8 -303.088 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 607.2 -303.4056987886024 M 611.2 -303.4056987886024 L 611.2 -303.406 M 611.2 -303.406 A 4 4 0 1 0 603.2 -303.406 A 4 4 0 1 0 611.2 -303.406 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 645.6 -303.3236741526517 M 649.6 -303.3236741526517 L 649.6 -303.324 M 649.6 -303.324 A 4 4 0 1 0 641.6 -303.324 A 4 4 0 1 0 649.6 -303.324 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 684.0 -303.5650884698231 M 688.0 -303.5650884698231 L 688 -303.565 M 688 -303.565 A 4 4 0 1 0 680 -303.565 A 4 4 0 1 0 688 -303.565 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 332.15 -295.57604288791424 L 344.65 -295.57604288791424 L 338.4 -305.57604288791424 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 370.55 -295.64005351989294 L 383.05 -295.64005351989294 L 376.8 -305.64005351989294 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 408.95 -295.022 L 421.45 -295.022 L 415.2 -305.022 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 447.35 -295.1926074147852 L 459.85 -295.1926074147852 L 453.6 -305.1926074147852 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 485.75 -295.0131999736001 L 498.25 -295.0131999736001 L 492.0 -305.0131999736001 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 524.15 -295.01099997360006 L 536.65 -295.01099997360006 L 530.4 -305.01099997360006 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 562.55 -295.00942855634287 L 575.05 -295.00942855634287 L 568.8 -305.00942855634287 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 600.95 -295.00824998350004 L 613.45 -295.00824998350004 L 607.2 -305.00824998350004 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 639.35 -295.00733332453336 L 651.85 -295.00733332453336 L 645.6 -305.00733332453336 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 677.75 -295.00659998680004 L 690.25 -295.00659998680004 L 684.0 -305.00659998680004 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 331.25714285714287 -300.2474691450617 L 338.4 -307.39032628791887 L 345.54285714285714 -300.2474691450617 L 338.4 -293.1046120022046 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 369.65714285714284 -300.03299993400015 L 376.8 -307.17585707685726 L 383.9428571428571 -300.03299993400015 L 376.8 -292.890142791143 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 408.0571428571429 -300.022 L 415.2 -307.16485714285716 L 422.34285714285716 -300.022 L 415.2 -292.8791428571429 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 446.45714285714286 -300.0164999670001 L 453.6 -307.1593571098572 L 460.74285714285713 -300.0164999670001 L 453.6 -292.8736428241429 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 484.8571428571429 -300.0131999736001 L 492.0 -307.1560571164572 L 499.1428571428571 -300.0131999736001 L 492.0 -292.8703428307429 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 523.2571428571429 -300.01099997360006 L 530.4 -307.1538571164572 L 537.5428571428572 -300.01099997360006 L 530.4 -292.8681428307429 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 561.6571428571428 -300.00942855634287 L 568.8 -307.15228569920004 L 575.9428571428572 -300.00942855634287 L 568.8 -292.86657141348576 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 600.0571428571428 -300.00824998350004 L 607.2 -307.1511071263572 L 614.3428571428572 -300.00824998350004 L 607.2 -292.86539284064287 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 638.4571428571428 -300.00733332453336 L 645.6 -307.1501904673905 L 652.7428571428572 -300.00733332453336 L 645.6 -292.8644761816762 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 676.8571428571429 -300.00659998680004 L 684.0 -307.14945712965715 L 691.1428571428571 -300.00659998680004 L 684.0 -292.8637428439429 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 307.0 -172.66666666666669 M 311.0 -172.66666666666669 L 311 -172.667 M 311 -172.667 A 4 4 0 1 0 303 -172.667 A 4 4 0 1 0 311 -172.667 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 300.75 -95.66666666666666 L 313.25 -95.66666666666666 L 307.0 -105.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 299.85714285714283 -64.66666666666666 L 307.0 -71.8095238095238 L 314.14285714285717 -64.66666666666666 L 307.0 -57.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 3.33e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 6.67e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.50048673219425">
+ 1.00e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.33e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 1.67e-06
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -382.6171827656345 L 376.8 -395.255629488741 L 415.2 -402.75559048881905 L 453.6 -405.1805576388847 L 492.0 -408.3180593638813 L 530.4 -412.5303029393941 L 568.8 -417.0708298583403 L 607.2 -416.9470141059718 L 645.6 -420.87493025013947 L 684.0 -422.1055637888724" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -374.6171827656345 L 330.4 -390.6171827656345 L 346.4 -390.6171827656345 L 346.4 -374.6171827656345 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -382.6171827656345 M 342.4 -382.6171827656345 L 342.4 -382.617 M 342.4 -382.617 A 4 4 0 1 0 334.4 -382.617 A 4 4 0 1 0 342.4 -382.617 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -387.255629488741 L 368.8 -403.255629488741 L 384.8 -403.255629488741 L 384.8 -387.255629488741 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -395.255629488741 M 380.8 -395.255629488741 L 380.8 -395.256 M 380.8 -395.256 A 4 4 0 1 0 372.8 -395.256 A 4 4 0 1 0 380.8 -395.256 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -394.75559048881905 L 407.2 -410.75559048881905 L 423.2 -410.75559048881905 L 423.2 -394.75559048881905 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -402.75559048881905 M 419.2 -402.75559048881905 L 419.2 -402.756 M 419.2 -402.756 A 4 4 0 1 0 411.2 -402.756 A 4 4 0 1 0 419.2 -402.756 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -397.1805576388847 L 445.6 -413.1805576388847 L 461.6 -413.1805576388847 L 461.6 -397.1805576388847 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -405.1805576388847 M 457.6 -405.1805576388847 L 457.6 -405.181 M 457.6 -405.181 A 4 4 0 1 0 449.6 -405.181 A 4 4 0 1 0 457.6 -405.181 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -400.3180593638813 L 484.0 -416.3180593638813 L 500.0 -416.3180593638813 L 500.0 -400.3180593638813 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -408.3180593638813 M 496.0 -408.3180593638813 L 496 -408.318 M 496 -408.318 A 4 4 0 1 0 488 -408.318 A 4 4 0 1 0 496 -408.318 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -404.5303029393941 L 522.4 -420.5303029393941 L 538.4 -420.5303029393941 L 538.4 -404.5303029393941 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -412.5303029393941 M 534.4 -412.5303029393941 L 534.4 -412.53 M 534.4 -412.53 A 4 4 0 1 0 526.4 -412.53 A 4 4 0 1 0 534.4 -412.53 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -409.0708298583403 L 560.8 -425.0708298583403 L 576.8 -425.0708298583403 L 576.8 -409.0708298583403 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -417.0708298583403 M 572.8 -417.0708298583403 L 572.8 -417.071 M 572.8 -417.071 A 4 4 0 1 0 564.8 -417.071 A 4 4 0 1 0 572.8 -417.071 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -408.9470141059718 L 599.2 -424.9470141059718 L 615.2 -424.9470141059718 L 615.2 -408.9470141059718 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -416.9470141059718 M 611.2 -416.9470141059718 L 611.2 -416.947 M 611.2 -416.947 A 4 4 0 1 0 603.2 -416.947 A 4 4 0 1 0 611.2 -416.947 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -412.87493025013947 L 637.6 -428.87493025013947 L 653.6 -428.87493025013947 L 653.6 -412.87493025013947 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -420.87493025013947 M 649.6 -420.87493025013947 L 649.6 -420.875 M 649.6 -420.875 A 4 4 0 1 0 641.6 -420.875 A 4 4 0 1 0 649.6 -420.875 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -414.1055637888724 L 676.0 -430.1055637888724 L 692.0 -430.1055637888724 L 692.0 -414.1055637888724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -422.1055637888724 M 688.0 -422.1055637888724 L 688 -422.106 M 688 -422.106 A 4 4 0 1 0 680 -422.106 A 4 4 0 1 0 688 -422.106 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -366.49671500656996 L 376.8 -372.4158471683057 L 415.2 -376.05837988324026 L 453.6 -381.13588172823654 L 492.0 -380.4262511474977 L 530.4 -384.32195935608127 L 568.8 -386.01221597556804 L 607.2 -389.05454589090823 L 645.6 -389.747544504911 L 684.0 -392.61589876820244" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 334.4 -362.49671500656996 L 334.4 -370.49671500656996 L 342.4 -370.49671500656996 L 342.4 -362.49671500656996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -362.49671500656996 L 334.4 -370.49671500656996 L 342.4 -370.49671500656996 L 342.4 -362.49671500656996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 372.8 -368.4158471683057 L 372.8 -376.4158471683057 L 380.8 -376.4158471683057 L 380.8 -368.4158471683057 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -368.4158471683057 L 372.8 -376.4158471683057 L 380.8 -376.4158471683057 L 380.8 -368.4158471683057 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 411.2 -372.05837988324026 L 411.2 -380.05837988324026 L 419.2 -380.05837988324026 L 419.2 -372.05837988324026 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -372.05837988324026 L 411.2 -380.05837988324026 L 419.2 -380.05837988324026 L 419.2 -372.05837988324026 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 449.6 -377.13588172823654 L 449.6 -385.13588172823654 L 457.6 -385.13588172823654 L 457.6 -377.13588172823654 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -377.13588172823654 L 449.6 -385.13588172823654 L 457.6 -385.13588172823654 L 457.6 -377.13588172823654 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 488.0 -376.4262511474977 L 488.0 -384.4262511474977 L 496.0 -384.4262511474977 L 496.0 -376.4262511474977 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -376.4262511474977 L 488.0 -384.4262511474977 L 496.0 -384.4262511474977 L 496.0 -376.4262511474977 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 526.4 -380.32195935608127 L 526.4 -388.32195935608127 L 534.4 -388.32195935608127 L 534.4 -380.32195935608127 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -380.32195935608127 L 526.4 -388.32195935608127 L 534.4 -388.32195935608127 L 534.4 -380.32195935608127 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 564.8 -382.01221597556804 L 564.8 -390.01221597556804 L 572.8 -390.01221597556804 L 572.8 -382.01221597556804 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -382.01221597556804 L 564.8 -390.01221597556804 L 572.8 -390.01221597556804 L 572.8 -382.01221597556804 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 603.2 -385.05454589090823 L 603.2 -393.05454589090823 L 611.2 -393.05454589090823 L 611.2 -385.05454589090823 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -385.05454589090823 L 603.2 -393.05454589090823 L 611.2 -393.05454589090823 L 611.2 -385.05454589090823 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 641.6 -385.747544504911 L 641.6 -393.747544504911 L 649.6 -393.747544504911 L 649.6 -385.747544504911 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -385.747544504911 L 641.6 -393.747544504911 L 649.6 -393.747544504911 L 649.6 -385.747544504911 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 680.0 -388.61589876820244 L 680.0 -396.61589876820244 L 688.0 -396.61589876820244 L 688.0 -388.61589876820244 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -388.61589876820244 L 680.0 -396.61589876820244 L 688.0 -396.61589876820244 L 688.0 -388.61589876820244 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -305.36429767140464 L 376.8 -314.1025877948244 L 415.2 -300.022 L 453.6 -300.0164999670001 L 492.0 -300.0131999736001 L 530.4 -300.01099997360006 L 568.8 -520.0 L 607.2 -409.999736000528 L 645.6 -373.33324533350935 L 684.0 -300.00659998680004" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -300.36429767140464 L 332.15 -310.36429767140464 L 344.65 -310.36429767140464 L 344.65 -300.36429767140464 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -300.36429767140464 L 332.15 -310.36429767140464 L 344.65 -310.36429767140464 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -309.1025877948244 L 370.55 -319.1025877948244 L 383.05 -319.1025877948244 L 383.05 -309.1025877948244 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -309.1025877948244 L 370.55 -319.1025877948244 L 383.05 -319.1025877948244 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -295.022 L 408.95 -305.022 L 421.45 -305.022 L 421.45 -295.022 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -295.022 L 408.95 -305.022 L 421.45 -305.022 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -295.0164999670001 L 447.35 -305.0164999670001 L 459.85 -305.0164999670001 L 459.85 -295.0164999670001 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -295.0164999670001 L 447.35 -305.0164999670001 L 459.85 -305.0164999670001 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -295.0131999736001 L 485.75 -305.0131999736001 L 498.25 -305.0131999736001 L 498.25 -295.0131999736001 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -295.0131999736001 L 485.75 -305.0131999736001 L 498.25 -305.0131999736001 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -295.01099997360006 L 524.15 -305.01099997360006 L 536.65 -305.01099997360006 L 536.65 -295.01099997360006 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -295.01099997360006 L 524.15 -305.01099997360006 L 536.65 -305.01099997360006 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -515.0 L 562.55 -525.0 L 575.05 -525.0 L 575.05 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -515.0 L 562.55 -525.0 L 575.05 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -404.999736000528 L 600.95 -414.999736000528 L 613.45 -414.999736000528 L 613.45 -404.999736000528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -404.999736000528 L 600.95 -414.999736000528 L 613.45 -414.999736000528 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -368.33324533350935 L 639.35 -378.33324533350935 L 651.85 -378.33324533350935 L 651.85 -368.33324533350935 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -368.33324533350935 L 639.35 -378.33324533350935 L 651.85 -378.33324533350935 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -295.00659998680004 L 677.75 -305.00659998680004 L 690.25 -305.00659998680004 L 690.25 -295.00659998680004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -295.00659998680004 L 677.75 -305.00659998680004 L 690.25 -305.00659998680004 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -302.65646828706343 L 376.8 -302.8030671938656 L 415.2 -302.6080111839776 L 453.6 -303.04239591520815 L 492.0 -302.87882184235633 L 530.4 -303.0942058115884 L 568.8 -303.08834502330996 L 607.2 -303.4056987886024 L 645.6 -303.3236741526517 L 684.0 -303.5650884698231" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 330.4 -294.65646828706343 L 330.4 -310.65646828706343 L 346.4 -310.65646828706343 L 346.4 -294.65646828706343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -302.65646828706343 M 342.4 -302.65646828706343 L 342.4 -302.656 M 342.4 -302.656 A 4 4 0 1 0 334.4 -302.656 A 4 4 0 1 0 342.4 -302.656 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 368.8 -294.8030671938656 L 368.8 -310.8030671938656 L 384.8 -310.8030671938656 L 384.8 -294.8030671938656 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -302.8030671938656 M 380.8 -302.8030671938656 L 380.8 -302.803 M 380.8 -302.803 A 4 4 0 1 0 372.8 -302.803 A 4 4 0 1 0 380.8 -302.803 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 407.2 -294.6080111839776 L 407.2 -310.6080111839776 L 423.2 -310.6080111839776 L 423.2 -294.6080111839776 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -302.6080111839776 M 419.2 -302.6080111839776 L 419.2 -302.608 M 419.2 -302.608 A 4 4 0 1 0 411.2 -302.608 A 4 4 0 1 0 419.2 -302.608 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 445.6 -295.04239591520815 L 445.6 -311.04239591520815 L 461.6 -311.04239591520815 L 461.6 -295.04239591520815 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -303.04239591520815 M 457.6 -303.04239591520815 L 457.6 -303.042 M 457.6 -303.042 A 4 4 0 1 0 449.6 -303.042 A 4 4 0 1 0 457.6 -303.042 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 484.0 -294.87882184235633 L 484.0 -310.87882184235633 L 500.0 -310.87882184235633 L 500.0 -294.87882184235633 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -302.87882184235633 M 496.0 -302.87882184235633 L 496 -302.879 M 496 -302.879 A 4 4 0 1 0 488 -302.879 A 4 4 0 1 0 496 -302.879 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 522.4 -295.0942058115884 L 522.4 -311.0942058115884 L 538.4 -311.0942058115884 L 538.4 -295.0942058115884 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -303.0942058115884 M 534.4 -303.0942058115884 L 534.4 -303.094 M 534.4 -303.094 A 4 4 0 1 0 526.4 -303.094 A 4 4 0 1 0 534.4 -303.094 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 560.8 -295.08834502330996 L 560.8 -311.08834502330996 L 576.8 -311.08834502330996 L 576.8 -295.08834502330996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -303.08834502330996 M 572.8 -303.08834502330996 L 572.8 -303.088 M 572.8 -303.088 A 4 4 0 1 0 564.8 -303.088 A 4 4 0 1 0 572.8 -303.088 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 599.2 -295.4056987886024 L 599.2 -311.4056987886024 L 615.2 -311.4056987886024 L 615.2 -295.4056987886024 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -303.4056987886024 M 611.2 -303.4056987886024 L 611.2 -303.406 M 611.2 -303.406 A 4 4 0 1 0 603.2 -303.406 A 4 4 0 1 0 611.2 -303.406 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 637.6 -295.3236741526517 L 637.6 -311.3236741526517 L 653.6 -311.3236741526517 L 653.6 -295.3236741526517 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -303.3236741526517 M 649.6 -303.3236741526517 L 649.6 -303.324 M 649.6 -303.324 A 4 4 0 1 0 641.6 -303.324 A 4 4 0 1 0 649.6 -303.324 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 676.0 -295.5650884698231 L 676.0 -311.5650884698231 L 692.0 -311.5650884698231 L 692.0 -295.5650884698231 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -303.5650884698231 M 688.0 -303.5650884698231 L 688 -303.565 M 688 -303.565 A 4 4 0 1 0 680 -303.565 A 4 4 0 1 0 688 -303.565 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -300.57604288791424 L 376.8 -300.64005351989294 L 415.2 -300.022 L 453.6 -300.1926074147852 L 492.0 -300.0131999736001 L 530.4 -300.01099997360006 L 568.8 -300.00942855634287 L 607.2 -300.00824998350004 L 645.6 -300.00733332453336 L 684.0 -300.00659998680004" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 332.15 -295.57604288791424 L 332.15 -305.57604288791424 L 344.65 -305.57604288791424 L 344.65 -295.57604288791424 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -295.57604288791424 L 344.65 -295.57604288791424 L 338.4 -305.57604288791424 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 370.55 -295.64005351989294 L 370.55 -305.64005351989294 L 383.05 -305.64005351989294 L 383.05 -295.64005351989294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -295.64005351989294 L 383.05 -295.64005351989294 L 376.8 -305.64005351989294 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 408.95 -295.022 L 408.95 -305.022 L 421.45 -305.022 L 421.45 -295.022 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -295.022 L 421.45 -295.022 L 415.2 -305.022 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 447.35 -295.1926074147852 L 447.35 -305.1926074147852 L 459.85 -305.1926074147852 L 459.85 -295.1926074147852 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -295.1926074147852 L 459.85 -295.1926074147852 L 453.6 -305.1926074147852 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 485.75 -295.0131999736001 L 485.75 -305.0131999736001 L 498.25 -305.0131999736001 L 498.25 -295.0131999736001 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -295.0131999736001 L 498.25 -295.0131999736001 L 492.0 -305.0131999736001 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 524.15 -295.01099997360006 L 524.15 -305.01099997360006 L 536.65 -305.01099997360006 L 536.65 -295.01099997360006 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -295.01099997360006 L 536.65 -295.01099997360006 L 530.4 -305.01099997360006 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 562.55 -295.00942855634287 L 562.55 -305.00942855634287 L 575.05 -305.00942855634287 L 575.05 -295.00942855634287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -295.00942855634287 L 575.05 -295.00942855634287 L 568.8 -305.00942855634287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 600.95 -295.00824998350004 L 600.95 -305.00824998350004 L 613.45 -305.00824998350004 L 613.45 -295.00824998350004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -295.00824998350004 L 613.45 -295.00824998350004 L 607.2 -305.00824998350004 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 639.35 -295.00733332453336 L 639.35 -305.00733332453336 L 651.85 -305.00733332453336 L 651.85 -295.00733332453336 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -295.00733332453336 L 651.85 -295.00733332453336 L 645.6 -305.00733332453336 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 677.75 -295.00659998680004 L 677.75 -305.00659998680004 L 690.25 -305.00659998680004 L 690.25 -295.00659998680004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -295.00659998680004 L 690.25 -295.00659998680004 L 684.0 -305.00659998680004 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 338.4 -300.0659998680003 L 376.8 -300.03299993400015 L 415.2 -300.3275613048774 L 453.6 -300.0164999670001 L 492.0 -300.166386987226 L 530.4 -300.224850990298 L 568.8 -300.00942855634287 L 607.2 -300.00824998350004 L 645.6 -300.00733332453336 L 684.0 -300.00659998680004" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <path d="M 331.25714285714287 -300.0659998680003 L 345.54285714285714 -300.0659998680003" style="stroke-width:1;"/>
+ <path d="M 338.4 -292.9231427251431 L 338.4 -307.2088570108574" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -300.03299993400015 L 383.9428571428571 -300.03299993400015" style="stroke-width:1;"/>
+ <path d="M 376.8 -292.890142791143 L 376.8 -307.17585707685726" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -300.3275613048774 L 422.34285714285716 -300.3275613048774" style="stroke-width:1;"/>
+ <path d="M 415.2 -293.18470416202024 L 415.2 -307.4704184477345" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -300.0164999670001 L 460.74285714285713 -300.0164999670001" style="stroke-width:1;"/>
+ <path d="M 453.6 -292.8736428241429 L 453.6 -307.1593571098572" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -300.166386987226 L 499.1428571428571 -300.166386987226" style="stroke-width:1;"/>
+ <path d="M 492.0 -293.0235298443689 L 492.0 -307.3092441300832" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -300.224850990298 L 537.5428571428572 -300.224850990298" style="stroke-width:1;"/>
+ <path d="M 530.4 -293.08199384744086 L 530.4 -307.3677081331552" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -300.00942855634287 L 575.9428571428572 -300.00942855634287" style="stroke-width:1;"/>
+ <path d="M 568.8 -292.86657141348576 L 568.8 -307.15228569920004" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -300.00824998350004 L 614.3428571428572 -300.00824998350004" style="stroke-width:1;"/>
+ <path d="M 607.2 -292.86539284064287 L 607.2 -307.1511071263572" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -300.00733332453336 L 652.7428571428572 -300.00733332453336" style="stroke-width:1;"/>
+ <path d="M 645.6 -292.8644761816762 L 645.6 -307.1501904673905" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -300.00659998680004 L 691.1428571428571 -300.00659998680004" style="stroke-width:1;"/>
+ <path d="M 684.0 -292.8637428439429 L 684.0 -307.14945712965715" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 338.4 -300.2474691450617 L 376.8 -300.03299993400015 L 415.2 -300.022 L 453.6 -300.0164999670001 L 492.0 -300.0131999736001 L 530.4 -300.01099997360006 L 568.8 -300.00942855634287 L 607.2 -300.00824998350004 L 645.6 -300.00733332453336 L 684.0 -300.00659998680004" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 331.25714285714287 -293.1046120022046 L 331.25714285714287 -307.39032628791887 L 345.54285714285714 -307.39032628791887 L 345.54285714285714 -293.1046120022046 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -300.2474691450617 L 338.4 -307.39032628791887 L 345.54285714285714 -300.2474691450617 L 338.4 -293.1046120022046 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 369.65714285714284 -292.890142791143 L 369.65714285714284 -307.17585707685726 L 383.9428571428571 -307.17585707685726 L 383.9428571428571 -292.890142791143 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -300.03299993400015 L 376.8 -307.17585707685726 L 383.9428571428571 -300.03299993400015 L 376.8 -292.890142791143 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 408.0571428571429 -292.8791428571429 L 408.0571428571429 -307.16485714285716 L 422.34285714285716 -307.16485714285716 L 422.34285714285716 -292.8791428571429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -300.022 L 415.2 -307.16485714285716 L 422.34285714285716 -300.022 L 415.2 -292.8791428571429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 446.45714285714286 -292.8736428241429 L 446.45714285714286 -307.1593571098572 L 460.74285714285713 -307.1593571098572 L 460.74285714285713 -292.8736428241429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -300.0164999670001 L 453.6 -307.1593571098572 L 460.74285714285713 -300.0164999670001 L 453.6 -292.8736428241429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 484.8571428571429 -292.8703428307429 L 484.8571428571429 -307.1560571164572 L 499.1428571428571 -307.1560571164572 L 499.1428571428571 -292.8703428307429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -300.0131999736001 L 492.0 -307.1560571164572 L 499.1428571428571 -300.0131999736001 L 492.0 -292.8703428307429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 523.2571428571429 -292.8681428307429 L 523.2571428571429 -307.1538571164572 L 537.5428571428572 -307.1538571164572 L 537.5428571428572 -292.8681428307429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -300.01099997360006 L 530.4 -307.1538571164572 L 537.5428571428572 -300.01099997360006 L 530.4 -292.8681428307429 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 561.6571428571428 -292.86657141348576 L 561.6571428571428 -307.15228569920004 L 575.9428571428572 -307.15228569920004 L 575.9428571428572 -292.86657141348576 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -300.00942855634287 L 568.8 -307.15228569920004 L 575.9428571428572 -300.00942855634287 L 568.8 -292.86657141348576 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 600.0571428571428 -292.86539284064287 L 600.0571428571428 -307.1511071263572 L 614.3428571428572 -307.1511071263572 L 614.3428571428572 -292.86539284064287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -300.00824998350004 L 607.2 -307.1511071263572 L 614.3428571428572 -300.00824998350004 L 607.2 -292.86539284064287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip73);">
+ <path d="M 638.4571428571428 -292.8644761816762 L 638.4571428571428 -307.1501904673905 L 652.7428571428572 -307.1501904673905 L 652.7428571428572 -292.8644761816762 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -300.00733332453336 L 645.6 -307.1501904673905 L 652.7428571428572 -300.00733332453336 L 645.6 -292.8644761816762 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip74);">
+ <path d="M 676.8571428571429 -292.8637428439429 L 676.8571428571429 -307.14945712965715 L 691.1428571428571 -307.14945712965715 L 691.1428571428571 -292.8637428439429 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -300.00659998680004 L 684.0 -307.14945712965715 L 691.1428571428571 -300.00659998680004 L 684.0 -292.8637428439429 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 299.0 -164.66666666666669 L 299.0 -180.66666666666669 L 315.0 -180.66666666666669 L 315.0 -164.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -172.66666666666669 M 311.0 -172.66666666666669 L 311 -172.667 M 311 -172.667 A 4 4 0 1 0 303 -172.667 A 4 4 0 1 0 311 -172.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 300.75 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 L 313.25 -131.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ binary_heap
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 299.0 -110.66666666666666 L 299.0 -126.66666666666666 L 315.0 -126.66666666666666 L 315.0 -110.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ thin_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 300.75 -95.66666666666666 L 300.75 -105.66666666666666 L 313.25 -105.66666666666666 L 313.25 -95.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -95.66666666666666 L 313.25 -95.66666666666666 L 307.0 -105.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -82.66666666666666 L 314.14285714285717 -82.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -75.52380952380952 L 307.0 -89.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 299.85714285714283 -57.52380952380952 L 299.85714285714283 -71.8095238095238 L 314.14285714285717 -71.8095238095238 L 314.14285714285717 -57.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -64.66666666666666 L 307.0 -71.8095238095238 L 314.14285714285717 -64.66666666666666 L 307.0 -57.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ rc_binomial_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 496.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 300.0 -315.90976699531035 M 304.0 -315.90976699531035 L 304 -315.91 M 304 -315.91 A 4 4 0 1 0 296 -315.91 A 4 4 0 1 0 304 -315.91 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 350.5263157894737 -335.1376093940401 M 354.5263157894737 -335.1376093940401 L 354.526 -335.138 M 354.526 -335.138 A 4 4 0 1 0 346.526 -335.138 A 4 4 0 1 0 354.526 -335.138 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 401.0526315789474 -355.8980835271962 M 405.0526315789474 -355.8980835271962 L 405.053 -355.898 M 405.053 -355.898 A 4 4 0 1 0 397.053 -355.898 A 4 4 0 1 0 405.053 -355.898 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 451.57894736842104 -377.5620299595042 M 455.57894736842104 -377.5620299595042 L 455.579 -377.562 M 455.579 -377.562 A 4 4 0 1 0 447.579 -377.562 A 4 4 0 1 0 455.579 -377.562 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 502.10526315789474 -400.3102298044139 M 506.10526315789474 -400.3102298044139 L 506.105 -400.31 M 506.105 -400.31 A 4 4 0 1 0 498.105 -400.31 A 4 4 0 1 0 506.105 -400.31 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 552.6315789473684 -423.89788658715213 M 556.6315789473684 -423.89788658715213 L 556.632 -423.898 M 556.632 -423.898 A 4 4 0 1 0 548.632 -423.898 A 4 4 0 1 0 556.632 -423.898 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 603.1578947368421 -448.4831431631033 M 607.1578947368421 -448.4831431631033 L 607.158 -448.483 M 607.158 -448.483 A 4 4 0 1 0 599.158 -448.483 A 4 4 0 1 0 607.158 -448.483 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 653.6842105263158 -469.8584247258225 M 657.6842105263158 -469.8584247258225 L 657.684 -469.858 M 657.684 -469.858 A 4 4 0 1 0 649.684 -469.858 A 4 4 0 1 0 657.684 -469.858 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 704.2105263157895 -497.1126127789471 M 708.2105263157895 -497.1126127789471 L 708.211 -497.113 M 708.211 -497.113 A 4 4 0 1 0 700.211 -497.113 A 4 4 0 1 0 708.211 -497.113 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 754.7368421052631 -520.0 M 758.7368421052631 -520.0 L 758.737 -520 M 758.737 -520 A 4 4 0 1 0 750.737 -520 A 4 4 0 1 0 758.737 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 296.0 -309.6265524414411 L 296.0 -317.6265524414411 L 304.0 -317.6265524414411 L 304.0 -309.6265524414411 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 346.5263157894737 -325.64301170562385 L 346.5263157894737 -333.64301170562385 L 354.5263157894737 -333.64301170562385 L 354.5263157894737 -325.64301170562385 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 397.0526315789474 -342.88090789360314 L 397.0526315789474 -350.88090789360314 L 405.0526315789474 -350.88090789360314 L 405.0526315789474 -342.88090789360314 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 447.57894736842104 -360.4849156234999 L 447.57894736842104 -368.4849156234999 L 455.57894736842104 -368.4849156234999 L 455.57894736842104 -360.4849156234999 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 498.10526315789474 -388.7383282252009 L 498.10526315789474 -396.7383282252009 L 506.10526315789474 -396.7383282252009 L 506.10526315789474 -388.7383282252009 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 548.6315789473684 -397.0413697180065 L 548.6315789473684 -405.0413697180065 L 556.6315789473684 -405.0413697180065 L 556.6315789473684 -397.0413697180065 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 599.1578947368421 -415.61069876789384 L 599.1578947368421 -423.61069876789384 L 607.1578947368421 -423.61069876789384 L 607.1578947368421 -415.61069876789384 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.6842105263158 -434.7811873022906 L 649.6842105263158 -442.7811873022906 L 657.6842105263158 -442.7811873022906 L 657.6842105263158 -434.7811873022906 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 700.2105263157895 -454.2105535246113 L 700.2105263157895 -462.2105535246113 L 708.2105263157895 -462.2105535246113 L 708.2105263157895 -454.2105535246113 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 750.7368421052631 -469.0770651009933 L 750.7368421052631 -477.0770651009933 L 758.7368421052631 -477.0770651009933 L 758.7368421052631 -469.0770651009933 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 300.0 -295.2036982878525 L 293.75 -305.2036982878525 L 306.25 -305.2036982878525 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 350.5263157894737 -295.2309086075108 L 344.2763157894737 -305.2309086075108 L 356.7763157894737 -305.2309086075108 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 401.0526315789474 -295.35524355329073 L 394.8026315789474 -305.35524355329073 L 407.3026315789474 -305.35524355329073 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 451.57894736842104 -295.4646253338749 L 445.32894736842104 -305.4646253338749 L 457.82894736842104 -305.4646253338749 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 502.10526315789474 -295.6507199389486 L 495.85526315789474 -305.6507199389486 L 508.35526315789474 -305.6507199389486 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 552.6315789473684 -295.618024445183 L 546.3815789473684 -305.618024445183 L 558.8815789473684 -305.618024445183 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 603.1578947368421 -295.7484652216191 L 596.9078947368421 -305.7484652216191 L 609.4078947368421 -305.7484652216191 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 653.6842105263158 -295.90264367391654 L 647.4342105263158 -305.90264367391654 L 659.9342105263158 -305.90264367391654 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 704.2105263157895 -296.00293440665655 L 697.9605263157895 -306.00293440665655 L 710.4605263157895 -306.00293440665655 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 754.7368421052631 -295.90264367391654 L 748.4868421052631 -305.90264367391654 L 760.9868421052631 -305.90264367391654 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 300.0 -300.22458343488057 M 304.0 -300.22458343488057 L 304 -300.225 M 304 -300.225 A 4 4 0 1 0 296 -300.225 A 4 4 0 1 0 304 -300.225 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 350.5263157894737 -300.2517341801755 M 354.5263157894737 -300.2517341801755 L 354.526 -300.252 M 354.526 -300.252 A 4 4 0 1 0 346.526 -300.252 A 4 4 0 1 0 354.526 -300.252 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 401.0526315789474 -300.2768897258841 M 405.0526315789474 -300.2768897258841 L 405.053 -300.277 M 405.053 -300.277 A 4 4 0 1 0 397.053 -300.277 A 4 4 0 1 0 405.053 -300.277 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 451.57894736842104 -300.28794672771807 M 455.57894736842104 -300.28794672771807 L 455.579 -300.288 M 455.579 -300.288 A 4 4 0 1 0 447.579 -300.288 A 4 4 0 1 0 455.579 -300.288 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 502.10526315789474 -300.291660376894 M 506.10526315789474 -300.291660376894 L 506.105 -300.292 M 506.105 -300.292 A 4 4 0 1 0 498.105 -300.292 A 4 4 0 1 0 506.105 -300.292 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 552.6315789473684 -300.31023187228436 M 556.6315789473684 -300.31023187228436 L 556.632 -300.31 M 556.632 -300.31 A 4 4 0 1 0 548.632 -300.31 A 4 4 0 1 0 556.632 -300.31 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 603.1578947368421 -300.31611836096647 M 607.1578947368421 -300.31611836096647 L 607.158 -300.316 M 607.158 -300.316 A 4 4 0 1 0 599.158 -300.316 A 4 4 0 1 0 607.158 -300.316 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 653.6842105263158 -300.33073845131275 M 657.6842105263158 -300.33073845131275 L 657.684 -300.331 M 657.684 -300.331 A 4 4 0 1 0 649.684 -300.331 A 4 4 0 1 0 657.684 -300.331 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 704.2105263157895 -300.2941430030895 M 708.2105263157895 -300.2941430030895 L 708.211 -300.294 M 708.211 -300.294 A 4 4 0 1 0 700.211 -300.294 A 4 4 0 1 0 708.211 -300.294 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 754.7368421052631 -300.3400017232254 M 758.7368421052631 -300.3400017232254 L 758.737 -300.34 M 758.737 -300.34 A 4 4 0 1 0 750.737 -300.34 A 4 4 0 1 0 758.737 -300.34 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 292.85714285714283 -300.1679098014598 L 300.0 -307.310766944317 L 307.14285714285717 -300.1679098014598 L 300.0 -293.0250526586027 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 343.38345864661653 -300.1683197813966 L 350.5263157894737 -307.3111769242537 L 357.6691729323308 -300.1683197813966 L 350.5263157894737 -293.0254626385394 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 393.90977443609023 -300.18987432763436 L 401.0526315789474 -307.3327314704915 L 408.1954887218045 -300.18987432763436 L 401.0526315789474 -293.04701718477725 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 444.43609022556393 -300.1749466169393 L 451.57894736842104 -307.31780375979645 L 458.72180451127815 -300.1749466169393 L 451.57894736842104 -293.03208947408217 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 494.9624060150376 -300.20742710141184 L 502.10526315789474 -307.35028424426895 L 509.2481203007519 -300.20742710141184 L 502.10526315789474 -293.06456995855467 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 545.4887218045112 -300.1916019841709 L 552.6315789473684 -307.3344591270281 L 559.7744360902255 -300.1916019841709 L 552.6315789473684 -293.0487448413138 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 596.015037593985 -300.20460219341976 L 603.1578947368421 -307.34745933627687 L 610.3007518796992 -300.20460219341976 L 603.1578947368421 -293.0617450505626 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 646.5413533834586 -300.1805097793041 L 653.6842105263158 -307.3233669221612 L 660.827067669173 -300.1805097793041 L 653.6842105263158 -293.0376526364469 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 697.0676691729323 -300.2223401893086 L 704.2105263157895 -307.36519733216574 L 711.3533834586467 -300.2223401893086 L 704.2105263157895 -293.07948304645146 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 747.593984962406 -300.2017648289699 L 754.7368421052631 -307.344621971827 L 761.8796992481203 -300.2017648289699 L 754.7368421052631 -293.0589076861127 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 293.75 -295.13010391049073 L 306.25 -295.13010391049073 L 300.0 -305.13010391049073 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 344.2763157894737 -295.1305604667479 L 356.7763157894737 -295.1305604667479 L 350.5263157894737 -305.1305604667479 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 394.8026315789474 -295.1319740039142 L 407.3026315789474 -295.1319740039142 L 401.0526315789474 -305.1319740039142 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 445.32894736842104 -295.13771372302847 L 457.82894736842104 -295.13771372302847 L 451.57894736842104 -305.13771372302847 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 495.85526315789474 -295.12636372364386 L 508.35526315789474 -295.12636372364386 L 502.10526315789474 -305.12636372364386 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 546.3815789473684 -295.13750358800144 L 558.8815789473684 -295.13750358800144 L 552.6315789473684 -305.13750358800144 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 596.9078947368421 -295.12546469234275 L 609.4078947368421 -295.12546469234275 L 603.1578947368421 -305.12546469234275 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 647.4342105263158 -295.1480287532464 L 659.9342105263158 -295.1480287532464 L 653.6842105263158 -305.1480287532464 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 697.9605263157895 -295.16962554312374 L 710.4605263157895 -295.16962554312374 L 704.2105263157895 -305.16962554312374 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 748.4868421052631 -295.127137648782 L 760.9868421052631 -295.127137648782 L 754.7368421052631 -305.127137648782 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 307.0 -172.66666666666669 M 311.0 -172.66666666666669 L 311 -172.667 M 311 -172.667 A 4 4 0 1 0 303 -172.667 A 4 4 0 1 0 311 -172.667 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 299.85714285714283 -100.66666666666666 L 307.0 -107.8095238095238 L 314.14285714285717 -100.66666666666666 L 307.0 -93.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 300.75 -77.66666666666666 L 313.25 -77.66666666666666 L 307.0 -87.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 100
+ </text>
+ <path d="M 401.0526315789474 -300 L 401.0526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,401.053,-279.001)" x="401.0526315789474" y="-279.00097346438844">
+ 300
+ </text>
+ <path d="M 502.10526315789474 -300 L 502.10526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,502.105,-279.001)" x="502.10526315789474" y="-279.00097346438844">
+ 500
+ </text>
+ <path d="M 603.1578947368421 -300 L 603.1578947368421 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,603.158,-279.001)" x="603.1578947368421" y="-279.00097346438844">
+ 700
+ </text>
+ <path d="M 704.2105263157895 -300 L 704.2105263157895 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,704.211,-279.001)" x="704.2105263157895" y="-279.00097346438844">
+ 900
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 8.12e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.62e-04
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.44e-04
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.25e-04
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.06e-04
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 300.0 -315.90976699531035 L 350.5263157894737 -335.1376093940401 L 401.0526315789474 -355.8980835271962 L 451.57894736842104 -377.5620299595042 L 502.10526315789474 -400.3102298044139 L 552.6315789473684 -423.89788658715213 L 603.1578947368421 -448.4831431631033 L 653.6842105263158 -469.8584247258225 L 704.2105263157895 -497.1126127789471 L 754.7368421052631 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 292.0 -307.90976699531035 L 292.0 -323.90976699531035 L 308.0 -323.90976699531035 L 308.0 -307.90976699531035 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -315.90976699531035 M 304.0 -315.90976699531035 L 304 -315.91 M 304 -315.91 A 4 4 0 1 0 296 -315.91 A 4 4 0 1 0 304 -315.91 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 342.5263157894737 -327.1376093940401 L 342.5263157894737 -343.1376093940401 L 358.5263157894737 -343.1376093940401 L 358.5263157894737 -327.1376093940401 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -335.1376093940401 M 354.5263157894737 -335.1376093940401 L 354.526 -335.138 M 354.526 -335.138 A 4 4 0 1 0 346.526 -335.138 A 4 4 0 1 0 354.526 -335.138 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 393.0526315789474 -347.8980835271962 L 393.0526315789474 -363.8980835271962 L 409.0526315789474 -363.8980835271962 L 409.0526315789474 -347.8980835271962 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -355.8980835271962 M 405.0526315789474 -355.8980835271962 L 405.053 -355.898 M 405.053 -355.898 A 4 4 0 1 0 397.053 -355.898 A 4 4 0 1 0 405.053 -355.898 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 443.57894736842104 -369.5620299595042 L 443.57894736842104 -385.5620299595042 L 459.57894736842104 -385.5620299595042 L 459.57894736842104 -369.5620299595042 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -377.5620299595042 M 455.57894736842104 -377.5620299595042 L 455.579 -377.562 M 455.579 -377.562 A 4 4 0 1 0 447.579 -377.562 A 4 4 0 1 0 455.579 -377.562 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 494.10526315789474 -392.3102298044139 L 494.10526315789474 -408.3102298044139 L 510.10526315789474 -408.3102298044139 L 510.10526315789474 -392.3102298044139 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -400.3102298044139 M 506.10526315789474 -400.3102298044139 L 506.105 -400.31 M 506.105 -400.31 A 4 4 0 1 0 498.105 -400.31 A 4 4 0 1 0 506.105 -400.31 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 544.6315789473684 -415.89788658715213 L 544.6315789473684 -431.89788658715213 L 560.6315789473684 -431.89788658715213 L 560.6315789473684 -415.89788658715213 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -423.89788658715213 M 556.6315789473684 -423.89788658715213 L 556.632 -423.898 M 556.632 -423.898 A 4 4 0 1 0 548.632 -423.898 A 4 4 0 1 0 556.632 -423.898 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 595.1578947368421 -440.4831431631033 L 595.1578947368421 -456.4831431631033 L 611.1578947368421 -456.4831431631033 L 611.1578947368421 -440.4831431631033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -448.4831431631033 M 607.1578947368421 -448.4831431631033 L 607.158 -448.483 M 607.158 -448.483 A 4 4 0 1 0 599.158 -448.483 A 4 4 0 1 0 607.158 -448.483 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 645.6842105263158 -461.8584247258225 L 645.6842105263158 -477.8584247258225 L 661.6842105263158 -477.8584247258225 L 661.6842105263158 -461.8584247258225 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -469.8584247258225 M 657.6842105263158 -469.8584247258225 L 657.684 -469.858 M 657.684 -469.858 A 4 4 0 1 0 649.684 -469.858 A 4 4 0 1 0 657.684 -469.858 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 696.2105263157895 -489.1126127789471 L 696.2105263157895 -505.1126127789471 L 712.2105263157895 -505.1126127789471 L 712.2105263157895 -489.1126127789471 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -497.1126127789471 M 708.2105263157895 -497.1126127789471 L 708.211 -497.113 M 708.211 -497.113 A 4 4 0 1 0 700.211 -497.113 A 4 4 0 1 0 708.211 -497.113 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 746.7368421052631 -512.0 L 746.7368421052631 -528.0 L 762.7368421052631 -528.0 L 762.7368421052631 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -520.0 M 758.7368421052631 -520.0 L 758.737 -520 M 758.737 -520 A 4 4 0 1 0 750.737 -520 A 4 4 0 1 0 758.737 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 300.0 -313.6265524414411 L 350.5263157894737 -329.64301170562385 L 401.0526315789474 -346.88090789360314 L 451.57894736842104 -364.4849156234999 L 502.10526315789474 -392.7383282252009 L 552.6315789473684 -401.0413697180065 L 603.1578947368421 -419.61069876789384 L 653.6842105263158 -438.7811873022906 L 704.2105263157895 -458.2105535246113 L 754.7368421052631 -473.0770651009933" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 296.0 -309.6265524414411 L 296.0 -317.6265524414411 L 304.0 -317.6265524414411 L 304.0 -309.6265524414411 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 296.0 -309.6265524414411 L 296.0 -317.6265524414411 L 304.0 -317.6265524414411 L 304.0 -309.6265524414411 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 346.5263157894737 -325.64301170562385 L 346.5263157894737 -333.64301170562385 L 354.5263157894737 -333.64301170562385 L 354.5263157894737 -325.64301170562385 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 346.5263157894737 -325.64301170562385 L 346.5263157894737 -333.64301170562385 L 354.5263157894737 -333.64301170562385 L 354.5263157894737 -325.64301170562385 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 397.0526315789474 -342.88090789360314 L 397.0526315789474 -350.88090789360314 L 405.0526315789474 -350.88090789360314 L 405.0526315789474 -342.88090789360314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 397.0526315789474 -342.88090789360314 L 397.0526315789474 -350.88090789360314 L 405.0526315789474 -350.88090789360314 L 405.0526315789474 -342.88090789360314 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.57894736842104 -360.4849156234999 L 447.57894736842104 -368.4849156234999 L 455.57894736842104 -368.4849156234999 L 455.57894736842104 -360.4849156234999 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.57894736842104 -360.4849156234999 L 447.57894736842104 -368.4849156234999 L 455.57894736842104 -368.4849156234999 L 455.57894736842104 -360.4849156234999 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 498.10526315789474 -388.7383282252009 L 498.10526315789474 -396.7383282252009 L 506.10526315789474 -396.7383282252009 L 506.10526315789474 -388.7383282252009 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 498.10526315789474 -388.7383282252009 L 498.10526315789474 -396.7383282252009 L 506.10526315789474 -396.7383282252009 L 506.10526315789474 -388.7383282252009 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 548.6315789473684 -397.0413697180065 L 548.6315789473684 -405.0413697180065 L 556.6315789473684 -405.0413697180065 L 556.6315789473684 -397.0413697180065 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 548.6315789473684 -397.0413697180065 L 548.6315789473684 -405.0413697180065 L 556.6315789473684 -405.0413697180065 L 556.6315789473684 -397.0413697180065 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.1578947368421 -415.61069876789384 L 599.1578947368421 -423.61069876789384 L 607.1578947368421 -423.61069876789384 L 607.1578947368421 -415.61069876789384 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.1578947368421 -415.61069876789384 L 599.1578947368421 -423.61069876789384 L 607.1578947368421 -423.61069876789384 L 607.1578947368421 -415.61069876789384 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 649.6842105263158 -434.7811873022906 L 649.6842105263158 -442.7811873022906 L 657.6842105263158 -442.7811873022906 L 657.6842105263158 -434.7811873022906 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.6842105263158 -434.7811873022906 L 649.6842105263158 -442.7811873022906 L 657.6842105263158 -442.7811873022906 L 657.6842105263158 -434.7811873022906 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 700.2105263157895 -454.2105535246113 L 700.2105263157895 -462.2105535246113 L 708.2105263157895 -462.2105535246113 L 708.2105263157895 -454.2105535246113 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.2105263157895 -454.2105535246113 L 700.2105263157895 -462.2105535246113 L 708.2105263157895 -462.2105535246113 L 708.2105263157895 -454.2105535246113 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 750.7368421052631 -469.0770651009933 L 750.7368421052631 -477.0770651009933 L 758.7368421052631 -477.0770651009933 L 758.7368421052631 -469.0770651009933 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 750.7368421052631 -469.0770651009933 L 750.7368421052631 -477.0770651009933 L 758.7368421052631 -477.0770651009933 L 758.7368421052631 -469.0770651009933 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 300.0 -300.2036982878525 L 350.5263157894737 -300.2309086075108 L 401.0526315789474 -300.35524355329073 L 451.57894736842104 -300.4646253338749 L 502.10526315789474 -300.6507199389486 L 552.6315789473684 -300.618024445183 L 603.1578947368421 -300.7484652216191 L 653.6842105263158 -300.90264367391654 L 704.2105263157895 -301.00293440665655 L 754.7368421052631 -300.90264367391654" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 293.75 -295.2036982878525 L 293.75 -305.2036982878525 L 306.25 -305.2036982878525 L 306.25 -295.2036982878525 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -295.2036982878525 L 293.75 -305.2036982878525 L 306.25 -305.2036982878525 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 344.2763157894737 -295.2309086075108 L 344.2763157894737 -305.2309086075108 L 356.7763157894737 -305.2309086075108 L 356.7763157894737 -295.2309086075108 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -295.2309086075108 L 344.2763157894737 -305.2309086075108 L 356.7763157894737 -305.2309086075108 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 394.8026315789474 -295.35524355329073 L 394.8026315789474 -305.35524355329073 L 407.3026315789474 -305.35524355329073 L 407.3026315789474 -295.35524355329073 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -295.35524355329073 L 394.8026315789474 -305.35524355329073 L 407.3026315789474 -305.35524355329073 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 445.32894736842104 -295.4646253338749 L 445.32894736842104 -305.4646253338749 L 457.82894736842104 -305.4646253338749 L 457.82894736842104 -295.4646253338749 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -295.4646253338749 L 445.32894736842104 -305.4646253338749 L 457.82894736842104 -305.4646253338749 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 495.85526315789474 -295.6507199389486 L 495.85526315789474 -305.6507199389486 L 508.35526315789474 -305.6507199389486 L 508.35526315789474 -295.6507199389486 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -295.6507199389486 L 495.85526315789474 -305.6507199389486 L 508.35526315789474 -305.6507199389486 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 546.3815789473684 -295.618024445183 L 546.3815789473684 -305.618024445183 L 558.8815789473684 -305.618024445183 L 558.8815789473684 -295.618024445183 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -295.618024445183 L 546.3815789473684 -305.618024445183 L 558.8815789473684 -305.618024445183 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 596.9078947368421 -295.7484652216191 L 596.9078947368421 -305.7484652216191 L 609.4078947368421 -305.7484652216191 L 609.4078947368421 -295.7484652216191 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -295.7484652216191 L 596.9078947368421 -305.7484652216191 L 609.4078947368421 -305.7484652216191 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 647.4342105263158 -295.90264367391654 L 647.4342105263158 -305.90264367391654 L 659.9342105263158 -305.90264367391654 L 659.9342105263158 -295.90264367391654 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -295.90264367391654 L 647.4342105263158 -305.90264367391654 L 659.9342105263158 -305.90264367391654 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 697.9605263157895 -296.00293440665655 L 697.9605263157895 -306.00293440665655 L 710.4605263157895 -306.00293440665655 L 710.4605263157895 -296.00293440665655 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -296.00293440665655 L 697.9605263157895 -306.00293440665655 L 710.4605263157895 -306.00293440665655 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 748.4868421052631 -295.90264367391654 L 748.4868421052631 -305.90264367391654 L 760.9868421052631 -305.90264367391654 L 760.9868421052631 -295.90264367391654 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -295.90264367391654 L 748.4868421052631 -305.90264367391654 L 760.9868421052631 -305.90264367391654 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 300.0 -300.22458343488057 L 350.5263157894737 -300.2517341801755 L 401.0526315789474 -300.2768897258841 L 451.57894736842104 -300.28794672771807 L 502.10526315789474 -300.291660376894 L 552.6315789473684 -300.31023187228436 L 603.1578947368421 -300.31611836096647 L 653.6842105263158 -300.33073845131275 L 704.2105263157895 -300.2941430030895 L 754.7368421052631 -300.3400017232254" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 292.0 -292.2245834348805 L 292.0 -308.2245834348805 L 308.0 -308.2245834348805 L 308.0 -292.2245834348805 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -300.22458343488057 M 304.0 -300.22458343488057 L 304 -300.225 M 304 -300.225 A 4 4 0 1 0 296 -300.225 A 4 4 0 1 0 304 -300.225 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 342.5263157894737 -292.2517341801755 L 342.5263157894737 -308.2517341801755 L 358.5263157894737 -308.2517341801755 L 358.5263157894737 -292.2517341801755 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -300.2517341801755 M 354.5263157894737 -300.2517341801755 L 354.526 -300.252 M 354.526 -300.252 A 4 4 0 1 0 346.526 -300.252 A 4 4 0 1 0 354.526 -300.252 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 393.0526315789474 -292.2768897258841 L 393.0526315789474 -308.2768897258841 L 409.0526315789474 -308.2768897258841 L 409.0526315789474 -292.2768897258841 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -300.2768897258841 M 405.0526315789474 -300.2768897258841 L 405.053 -300.277 M 405.053 -300.277 A 4 4 0 1 0 397.053 -300.277 A 4 4 0 1 0 405.053 -300.277 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 443.57894736842104 -292.28794672771807 L 443.57894736842104 -308.28794672771807 L 459.57894736842104 -308.28794672771807 L 459.57894736842104 -292.28794672771807 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -300.28794672771807 M 455.57894736842104 -300.28794672771807 L 455.579 -300.288 M 455.579 -300.288 A 4 4 0 1 0 447.579 -300.288 A 4 4 0 1 0 455.579 -300.288 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 494.10526315789474 -292.291660376894 L 494.10526315789474 -308.291660376894 L 510.10526315789474 -308.291660376894 L 510.10526315789474 -292.291660376894 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -300.291660376894 M 506.10526315789474 -300.291660376894 L 506.105 -300.292 M 506.105 -300.292 A 4 4 0 1 0 498.105 -300.292 A 4 4 0 1 0 506.105 -300.292 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 544.6315789473684 -292.31023187228436 L 544.6315789473684 -308.31023187228436 L 560.6315789473684 -308.31023187228436 L 560.6315789473684 -292.31023187228436 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -300.31023187228436 M 556.6315789473684 -300.31023187228436 L 556.632 -300.31 M 556.632 -300.31 A 4 4 0 1 0 548.632 -300.31 A 4 4 0 1 0 556.632 -300.31 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 595.1578947368421 -292.31611836096647 L 595.1578947368421 -308.31611836096647 L 611.1578947368421 -308.31611836096647 L 611.1578947368421 -292.31611836096647 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -300.31611836096647 M 607.1578947368421 -300.31611836096647 L 607.158 -300.316 M 607.158 -300.316 A 4 4 0 1 0 599.158 -300.316 A 4 4 0 1 0 607.158 -300.316 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 645.6842105263158 -292.33073845131275 L 645.6842105263158 -308.33073845131275 L 661.6842105263158 -308.33073845131275 L 661.6842105263158 -292.33073845131275 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -300.33073845131275 M 657.6842105263158 -300.33073845131275 L 657.684 -300.331 M 657.684 -300.331 A 4 4 0 1 0 649.684 -300.331 A 4 4 0 1 0 657.684 -300.331 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 696.2105263157895 -292.2941430030895 L 696.2105263157895 -308.2941430030895 L 712.2105263157895 -308.2941430030895 L 712.2105263157895 -292.2941430030895 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -300.2941430030895 M 708.2105263157895 -300.2941430030895 L 708.211 -300.294 M 708.211 -300.294 A 4 4 0 1 0 700.211 -300.294 A 4 4 0 1 0 708.211 -300.294 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 746.7368421052631 -292.3400017232254 L 746.7368421052631 -308.3400017232254 L 762.7368421052631 -308.3400017232254 L 762.7368421052631 -292.3400017232254 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -300.3400017232254 M 758.7368421052631 -300.3400017232254 L 758.737 -300.34 M 758.737 -300.34 A 4 4 0 1 0 750.737 -300.34 A 4 4 0 1 0 758.737 -300.34 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 300.0 -300.1679098014598 L 350.5263157894737 -300.1683197813966 L 401.0526315789474 -300.18987432763436 L 451.57894736842104 -300.1749466169393 L 502.10526315789474 -300.20742710141184 L 552.6315789473684 -300.1916019841709 L 603.1578947368421 -300.20460219341976 L 653.6842105263158 -300.1805097793041 L 704.2105263157895 -300.2223401893086 L 754.7368421052631 -300.2017648289699" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 292.85714285714283 -293.0250526586027 L 292.85714285714283 -307.310766944317 L 307.14285714285717 -307.310766944317 L 307.14285714285717 -293.0250526586027 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 292.85714285714283 -300.1679098014598 L 300.0 -307.310766944317 L 307.14285714285717 -300.1679098014598 L 300.0 -293.0250526586027 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 343.38345864661653 -293.0254626385394 L 343.38345864661653 -307.3111769242537 L 357.6691729323308 -307.3111769242537 L 357.6691729323308 -293.0254626385394 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.38345864661653 -300.1683197813966 L 350.5263157894737 -307.3111769242537 L 357.6691729323308 -300.1683197813966 L 350.5263157894737 -293.0254626385394 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 393.90977443609023 -293.04701718477725 L 393.90977443609023 -307.3327314704915 L 408.1954887218045 -307.3327314704915 L 408.1954887218045 -293.04701718477725 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 393.90977443609023 -300.18987432763436 L 401.0526315789474 -307.3327314704915 L 408.1954887218045 -300.18987432763436 L 401.0526315789474 -293.04701718477725 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 444.43609022556393 -293.03208947408217 L 444.43609022556393 -307.31780375979645 L 458.72180451127815 -307.31780375979645 L 458.72180451127815 -293.03208947408217 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 444.43609022556393 -300.1749466169393 L 451.57894736842104 -307.31780375979645 L 458.72180451127815 -300.1749466169393 L 451.57894736842104 -293.03208947408217 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 494.9624060150376 -293.06456995855467 L 494.9624060150376 -307.35028424426895 L 509.2481203007519 -307.35028424426895 L 509.2481203007519 -293.06456995855467 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 494.9624060150376 -300.20742710141184 L 502.10526315789474 -307.35028424426895 L 509.2481203007519 -300.20742710141184 L 502.10526315789474 -293.06456995855467 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 545.4887218045112 -293.0487448413138 L 545.4887218045112 -307.3344591270281 L 559.7744360902255 -307.3344591270281 L 559.7744360902255 -293.0487448413138 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 545.4887218045112 -300.1916019841709 L 552.6315789473684 -307.3344591270281 L 559.7744360902255 -300.1916019841709 L 552.6315789473684 -293.0487448413138 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 596.015037593985 -293.0617450505626 L 596.015037593985 -307.34745933627687 L 610.3007518796992 -307.34745933627687 L 610.3007518796992 -293.0617450505626 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 596.015037593985 -300.20460219341976 L 603.1578947368421 -307.34745933627687 L 610.3007518796992 -300.20460219341976 L 603.1578947368421 -293.0617450505626 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 646.5413533834586 -293.0376526364469 L 646.5413533834586 -307.3233669221612 L 660.827067669173 -307.3233669221612 L 660.827067669173 -293.0376526364469 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 646.5413533834586 -300.1805097793041 L 653.6842105263158 -307.3233669221612 L 660.827067669173 -300.1805097793041 L 653.6842105263158 -293.0376526364469 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 697.0676691729323 -293.07948304645146 L 697.0676691729323 -307.36519733216574 L 711.3533834586467 -307.36519733216574 L 711.3533834586467 -293.07948304645146 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 697.0676691729323 -300.2223401893086 L 704.2105263157895 -307.36519733216574 L 711.3533834586467 -300.2223401893086 L 704.2105263157895 -293.07948304645146 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 747.593984962406 -293.0589076861127 L 747.593984962406 -307.344621971827 L 761.8796992481203 -307.344621971827 L 761.8796992481203 -293.0589076861127 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 747.593984962406 -300.2017648289699 L 754.7368421052631 -307.344621971827 L 761.8796992481203 -300.2017648289699 L 754.7368421052631 -293.0589076861127 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 300.0 -300.13010391049073 L 350.5263157894737 -300.1305604667479 L 401.0526315789474 -300.1319740039142 L 451.57894736842104 -300.13771372302847 L 502.10526315789474 -300.12636372364386 L 552.6315789473684 -300.13750358800144 L 603.1578947368421 -300.12546469234275 L 653.6842105263158 -300.1480287532464 L 704.2105263157895 -300.16962554312374 L 754.7368421052631 -300.127137648782" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip63);">
+ <path d="M 293.75 -295.13010391049073 L 293.75 -305.13010391049073 L 306.25 -305.13010391049073 L 306.25 -295.13010391049073 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 293.75 -295.13010391049073 L 306.25 -295.13010391049073 L 300.0 -305.13010391049073 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip64);">
+ <path d="M 344.2763157894737 -295.1305604667479 L 344.2763157894737 -305.1305604667479 L 356.7763157894737 -305.1305604667479 L 356.7763157894737 -295.1305604667479 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 344.2763157894737 -295.1305604667479 L 356.7763157894737 -295.1305604667479 L 350.5263157894737 -305.1305604667479 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 394.8026315789474 -295.1319740039142 L 394.8026315789474 -305.1319740039142 L 407.3026315789474 -305.1319740039142 L 407.3026315789474 -295.1319740039142 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 394.8026315789474 -295.1319740039142 L 407.3026315789474 -295.1319740039142 L 401.0526315789474 -305.1319740039142 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 445.32894736842104 -295.13771372302847 L 445.32894736842104 -305.13771372302847 L 457.82894736842104 -305.13771372302847 L 457.82894736842104 -295.13771372302847 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.32894736842104 -295.13771372302847 L 457.82894736842104 -295.13771372302847 L 451.57894736842104 -305.13771372302847 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 495.85526315789474 -295.12636372364386 L 495.85526315789474 -305.12636372364386 L 508.35526315789474 -305.12636372364386 L 508.35526315789474 -295.12636372364386 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 495.85526315789474 -295.12636372364386 L 508.35526315789474 -295.12636372364386 L 502.10526315789474 -305.12636372364386 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 546.3815789473684 -295.13750358800144 L 546.3815789473684 -305.13750358800144 L 558.8815789473684 -305.13750358800144 L 558.8815789473684 -295.13750358800144 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 546.3815789473684 -295.13750358800144 L 558.8815789473684 -295.13750358800144 L 552.6315789473684 -305.13750358800144 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 596.9078947368421 -295.12546469234275 L 596.9078947368421 -305.12546469234275 L 609.4078947368421 -305.12546469234275 L 609.4078947368421 -295.12546469234275 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 596.9078947368421 -295.12546469234275 L 609.4078947368421 -295.12546469234275 L 603.1578947368421 -305.12546469234275 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 647.4342105263158 -295.1480287532464 L 647.4342105263158 -305.1480287532464 L 659.9342105263158 -305.1480287532464 L 659.9342105263158 -295.1480287532464 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 647.4342105263158 -295.1480287532464 L 659.9342105263158 -295.1480287532464 L 653.6842105263158 -305.1480287532464 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 697.9605263157895 -295.16962554312374 L 697.9605263157895 -305.16962554312374 L 710.4605263157895 -305.16962554312374 L 710.4605263157895 -295.16962554312374 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 697.9605263157895 -295.16962554312374 L 710.4605263157895 -295.16962554312374 L 704.2105263157895 -305.16962554312374 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 748.4868421052631 -295.127137648782 L 748.4868421052631 -305.127137648782 L 760.9868421052631 -305.127137648782 L 760.9868421052631 -295.127137648782 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 748.4868421052631 -295.127137648782 L 760.9868421052631 -295.127137648782 L 754.7368421052631 -305.127137648782 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip73);">
+ <path d="M 300.0 -300.0776557241855 L 350.5263157894737 -300.0799520450993 L 401.0526315789474 -300.08399443644373 L 451.57894736842104 -300.0801578474453 L 502.10526315789474 -300.1002999396871 L 552.6315789473684 -300.07683413955664 L 603.1578947368421 -300.0803880211218 L 653.6842105263158 -300.078105239836 L 704.2105263157895 -300.0825121179671 L 754.7368421052631 -300.08415691198013" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip74);">
+ <path d="M 292.85714285714283 -300.0776557241855 L 307.14285714285717 -300.0776557241855" style="stroke-width:1;"/>
+ <path d="M 300.0 -292.9347985813283 L 300.0 -307.2205128670426" style="stroke-width:1;"/>
+ <path d="M 343.38345864661653 -300.0799520450993 L 357.6691729323308 -300.0799520450993" style="stroke-width:1;"/>
+ <path d="M 350.5263157894737 -292.9370949022421 L 350.5263157894737 -307.2228091879564" style="stroke-width:1;"/>
+ <path d="M 393.90977443609023 -300.08399443644373 L 408.1954887218045 -300.08399443644373" style="stroke-width:1;"/>
+ <path d="M 401.0526315789474 -292.9411372935866 L 401.0526315789474 -307.2268515793009" style="stroke-width:1;"/>
+ <path d="M 444.43609022556393 -300.0801578474453 L 458.72180451127815 -300.0801578474453" style="stroke-width:1;"/>
+ <path d="M 451.57894736842104 -292.93730070458815 L 451.57894736842104 -307.2230149903025" style="stroke-width:1;"/>
+ <path d="M 494.9624060150376 -300.1002999396871 L 509.2481203007519 -300.1002999396871" style="stroke-width:1;"/>
+ <path d="M 502.10526315789474 -292.95744279683 L 502.10526315789474 -307.24315708254426" style="stroke-width:1;"/>
+ <path d="M 545.4887218045112 -300.07683413955664 L 559.7744360902255 -300.07683413955664" style="stroke-width:1;"/>
+ <path d="M 552.6315789473684 -292.93397699669947 L 552.6315789473684 -307.2196912824138" style="stroke-width:1;"/>
+ <path d="M 596.015037593985 -300.0803880211218 L 610.3007518796992 -300.0803880211218" style="stroke-width:1;"/>
+ <path d="M 603.1578947368421 -292.9375308782647 L 603.1578947368421 -307.22324516397896" style="stroke-width:1;"/>
+ <path d="M 646.5413533834586 -300.078105239836 L 660.827067669173 -300.078105239836" style="stroke-width:1;"/>
+ <path d="M 653.6842105263158 -292.9352480969789 L 653.6842105263158 -307.2209623826932" style="stroke-width:1;"/>
+ <path d="M 697.0676691729323 -300.0825121179671 L 711.3533834586467 -300.0825121179671" style="stroke-width:1;"/>
+ <path d="M 704.2105263157895 -292.93965497510993 L 704.2105263157895 -307.2253692608242" style="stroke-width:1;"/>
+ <path d="M 747.593984962406 -300.08415691198013 L 761.8796992481203 -300.08415691198013" style="stroke-width:1;"/>
+ <path d="M 754.7368421052631 -292.94129976912296 L 754.7368421052631 -307.22701405483724" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 299.0 -164.66666666666669 L 299.0 -180.66666666666669 L 315.0 -180.66666666666669 L 315.0 -164.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -172.66666666666669 M 311.0 -172.66666666666669 L 311 -172.667 M 311 -172.667 A 4 4 0 1 0 303 -172.667 A 4 4 0 1 0 311 -172.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 300.75 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 L 313.25 -131.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ binary_heap
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 299.0 -110.66666666666666 L 299.0 -126.66666666666666 L 315.0 -126.66666666666666 L 315.0 -110.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ thin_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 299.85714285714283 -93.52380952380952 L 299.85714285714283 -107.8095238095238 L 314.14285714285717 -107.8095238095238 L 314.14285714285717 -93.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -100.66666666666666 L 307.0 -107.8095238095238 L 314.14285714285717 -100.66666666666666 L 307.0 -93.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 300.75 -77.66666666666666 L 300.75 -87.66666666666666 L 313.25 -87.66666666666666 L 313.25 -77.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -77.66666666666666 L 313.25 -77.66666666666666 L 307.0 -87.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -64.66666666666666 L 314.14285714285717 -64.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -57.52380952380952 L 307.0 -71.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 396.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 300.0 -445.3179566415521 M 304.0 -445.3179566415521 L 304 -445.318 M 304 -445.318 A 4 4 0 1 0 296 -445.318 A 4 4 0 1 0 304 -445.318 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 350.5263157894737 -462.8859969097947 M 354.5263157894737 -462.8859969097947 L 354.526 -462.886 M 354.526 -462.886 A 4 4 0 1 0 346.526 -462.886 A 4 4 0 1 0 354.526 -462.886 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 401.0526315789474 -479.1630322241514 M 405.0526315789474 -479.1630322241514 L 405.053 -479.163 M 405.053 -479.163 A 4 4 0 1 0 397.053 -479.163 A 4 4 0 1 0 405.053 -479.163 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 451.57894736842104 -486.31752656142976 M 455.57894736842104 -486.31752656142976 L 455.579 -486.318 M 455.579 -486.318 A 4 4 0 1 0 447.579 -486.318 A 4 4 0 1 0 455.579 -486.318 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 502.10526315789474 -488.7204638493764 M 506.10526315789474 -488.7204638493764 L 506.105 -488.72 M 506.105 -488.72 A 4 4 0 1 0 498.105 -488.72 A 4 4 0 1 0 506.105 -488.72 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 552.6315789473684 -500.7372529030408 M 556.6315789473684 -500.7372529030408 L 556.632 -500.737 M 556.632 -500.737 A 4 4 0 1 0 548.632 -500.737 A 4 4 0 1 0 556.632 -500.737 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 603.1578947368421 -504.5461380397904 M 607.1578947368421 -504.5461380397904 L 607.158 -504.546 M 607.158 -504.546 A 4 4 0 1 0 599.158 -504.546 A 4 4 0 1 0 607.158 -504.546 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 653.6842105263158 -514.00614855286 M 657.6842105263158 -514.00614855286 L 657.684 -514.006 M 657.684 -514.006 A 4 4 0 1 0 649.684 -514.006 A 4 4 0 1 0 657.684 -514.006 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 704.2105263157895 -490.32686089297374 M 708.2105263157895 -490.32686089297374 L 708.211 -490.327 M 708.211 -490.327 A 4 4 0 1 0 700.211 -490.327 A 4 4 0 1 0 708.211 -490.327 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 754.7368421052631 -520.0 M 758.7368421052631 -520.0 L 758.737 -520 M 758.737 -520 A 4 4 0 1 0 750.737 -520 A 4 4 0 1 0 758.737 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 307.0 -182.66666666666669 M 311.0 -182.66666666666669 L 311 -182.667 M 311 -182.667 A 4 4 0 1 0 303 -182.667 A 4 4 0 1 0 311 -182.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 100
+ </text>
+ <path d="M 401.0526315789474 -300 L 401.0526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,401.053,-279.001)" x="401.0526315789474" y="-279.00097346438844">
+ 300
+ </text>
+ <path d="M 502.10526315789474 -300 L 502.10526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,502.105,-279.001)" x="502.10526315789474" y="-279.00097346438844">
+ 500
+ </text>
+ <path d="M 603.1578947368421 -300 L 603.1578947368421 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,603.158,-279.001)" x="603.1578947368421" y="-279.00097346438844">
+ 700
+ </text>
+ <path d="M 704.2105263157895 -300 L 704.2105263157895 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,704.211,-279.001)" x="704.2105263157895" y="-279.00097346438844">
+ 900
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.26e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 2.51e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 3.77e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 5.02e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 6.28e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 300.0 -445.3179566415521 L 350.5263157894737 -462.8859969097947 L 401.0526315789474 -479.1630322241514 L 451.57894736842104 -486.31752656142976 L 502.10526315789474 -488.7204638493764 L 552.6315789473684 -500.7372529030408 L 603.1578947368421 -504.5461380397904 L 653.6842105263158 -514.00614855286 L 704.2105263157895 -490.32686089297374 L 754.7368421052631 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 292.0 -437.3179566415521 L 292.0 -453.3179566415521 L 308.0 -453.3179566415521 L 308.0 -437.3179566415521 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -445.3179566415521 M 304.0 -445.3179566415521 L 304 -445.318 M 304 -445.318 A 4 4 0 1 0 296 -445.318 A 4 4 0 1 0 304 -445.318 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 342.5263157894737 -454.8859969097947 L 342.5263157894737 -470.8859969097947 L 358.5263157894737 -470.8859969097947 L 358.5263157894737 -454.8859969097947 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -462.8859969097947 M 354.5263157894737 -462.8859969097947 L 354.526 -462.886 M 354.526 -462.886 A 4 4 0 1 0 346.526 -462.886 A 4 4 0 1 0 354.526 -462.886 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 393.0526315789474 -471.1630322241514 L 393.0526315789474 -487.1630322241514 L 409.0526315789474 -487.1630322241514 L 409.0526315789474 -471.1630322241514 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -479.1630322241514 M 405.0526315789474 -479.1630322241514 L 405.053 -479.163 M 405.053 -479.163 A 4 4 0 1 0 397.053 -479.163 A 4 4 0 1 0 405.053 -479.163 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 443.57894736842104 -478.31752656142976 L 443.57894736842104 -494.31752656142976 L 459.57894736842104 -494.31752656142976 L 459.57894736842104 -478.31752656142976 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -486.31752656142976 M 455.57894736842104 -486.31752656142976 L 455.579 -486.318 M 455.579 -486.318 A 4 4 0 1 0 447.579 -486.318 A 4 4 0 1 0 455.579 -486.318 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 494.10526315789474 -480.7204638493764 L 494.10526315789474 -496.7204638493764 L 510.10526315789474 -496.7204638493764 L 510.10526315789474 -480.7204638493764 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -488.7204638493764 M 506.10526315789474 -488.7204638493764 L 506.105 -488.72 M 506.105 -488.72 A 4 4 0 1 0 498.105 -488.72 A 4 4 0 1 0 506.105 -488.72 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 544.6315789473684 -492.7372529030408 L 544.6315789473684 -508.7372529030408 L 560.6315789473684 -508.7372529030408 L 560.6315789473684 -492.7372529030408 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -500.7372529030408 M 556.6315789473684 -500.7372529030408 L 556.632 -500.737 M 556.632 -500.737 A 4 4 0 1 0 548.632 -500.737 A 4 4 0 1 0 556.632 -500.737 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 595.1578947368421 -496.5461380397904 L 595.1578947368421 -512.5461380397903 L 611.1578947368421 -512.5461380397903 L 611.1578947368421 -496.5461380397904 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -504.5461380397904 M 607.1578947368421 -504.5461380397904 L 607.158 -504.546 M 607.158 -504.546 A 4 4 0 1 0 599.158 -504.546 A 4 4 0 1 0 607.158 -504.546 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 645.6842105263158 -506.00614855286005 L 645.6842105263158 -522.00614855286 L 661.6842105263158 -522.00614855286 L 661.6842105263158 -506.00614855286005 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -514.00614855286 M 657.6842105263158 -514.00614855286 L 657.684 -514.006 M 657.684 -514.006 A 4 4 0 1 0 649.684 -514.006 A 4 4 0 1 0 657.684 -514.006 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 696.2105263157895 -482.32686089297374 L 696.2105263157895 -498.32686089297374 L 712.2105263157895 -498.32686089297374 L 712.2105263157895 -482.32686089297374 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -490.32686089297374 M 708.2105263157895 -490.32686089297374 L 708.211 -490.327 M 708.211 -490.327 A 4 4 0 1 0 700.211 -490.327 A 4 4 0 1 0 708.211 -490.327 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 746.7368421052631 -512.0 L 746.7368421052631 -528.0 L 762.7368421052631 -528.0 L 762.7368421052631 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -520.0 M 758.7368421052631 -520.0 L 758.737 -520 M 758.737 -520 A 4 4 0 1 0 750.737 -520 A 4 4 0 1 0 758.737 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 300.0 -350.2475668615301 L 350.5263157894737 -351.73341403972665 L 401.0526315789474 -354.3490657704009 L 451.57894736842104 -351.866579588716 L 502.10526315789474 -364.899632042562 L 552.6315789473684 -349.7159559725386 L 603.1578947368421 -352.0155147421909 L 653.6842105263158 -350.5384284553752 L 704.2105263157895 -353.38992338202263 L 754.7368421052631 -354.45419646697144" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <path d="M 292.85714285714283 -350.2475668615301 L 307.14285714285717 -350.2475668615301" style="stroke-width:1;"/>
+ <path d="M 300.0 -343.104709718673 L 300.0 -357.3904240043873" style="stroke-width:1;"/>
+ <path d="M 343.38345864661653 -351.73341403972665 L 357.6691729323308 -351.73341403972665" style="stroke-width:1;"/>
+ <path d="M 350.5263157894737 -344.5905568968695 L 350.5263157894737 -358.8762711825838" style="stroke-width:1;"/>
+ <path d="M 393.90977443609023 -354.3490657704009 L 408.1954887218045 -354.3490657704009" style="stroke-width:1;"/>
+ <path d="M 401.0526315789474 -347.2062086275438 L 401.0526315789474 -361.49192291325807" style="stroke-width:1;"/>
+ <path d="M 444.43609022556393 -351.866579588716 L 458.72180451127815 -351.866579588716" style="stroke-width:1;"/>
+ <path d="M 451.57894736842104 -344.7237224458588 L 451.57894736842104 -359.00943673157315" style="stroke-width:1;"/>
+ <path d="M 494.9624060150376 -364.899632042562 L 509.2481203007519 -364.899632042562" style="stroke-width:1;"/>
+ <path d="M 502.10526315789474 -357.75677489970485 L 502.10526315789474 -372.04248918541913" style="stroke-width:1;"/>
+ <path d="M 545.4887218045112 -349.7159559725386 L 559.7744360902255 -349.7159559725386" style="stroke-width:1;"/>
+ <path d="M 552.6315789473684 -342.57309882968144 L 552.6315789473684 -356.8588131153957" style="stroke-width:1;"/>
+ <path d="M 596.015037593985 -352.0155147421909 L 610.3007518796992 -352.0155147421909" style="stroke-width:1;"/>
+ <path d="M 603.1578947368421 -344.8726575993337 L 603.1578947368421 -359.158371885048" style="stroke-width:1;"/>
+ <path d="M 646.5413533834586 -350.5384284553752 L 660.827067669173 -350.5384284553752" style="stroke-width:1;"/>
+ <path d="M 653.6842105263158 -343.3955713125181 L 653.6842105263158 -357.68128559823236" style="stroke-width:1;"/>
+ <path d="M 697.0676691729323 -353.38992338202263 L 711.3533834586467 -353.38992338202263" style="stroke-width:1;"/>
+ <path d="M 704.2105263157895 -346.2470662391655 L 704.2105263157895 -360.5327805248798" style="stroke-width:1;"/>
+ <path d="M 747.593984962406 -354.45419646697144 L 761.8796992481203 -354.45419646697144" style="stroke-width:1;"/>
+ <path d="M 754.7368421052631 -347.3113393241143 L 754.7368421052631 -361.5970536098286" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -182.66666666666669 L 314 -182.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 299.0 -174.66666666666669 L 299.0 -190.66666666666669 L 315.0 -190.66666666666669 L 315.0 -174.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -182.66666666666669 M 311.0 -182.66666666666669 L 311 -182.667 M 311 -182.667 A 4 4 0 1 0 303 -182.667 A 4 4 0 1 0 311 -182.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-178.0">
+ thin_heap
+ </text>
+ <path d="M 300 -164.66666666666666 L 314 -164.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -164.66666666666666 L 314.14285714285717 -164.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -157.52380952380952 L 307.0 -171.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-160.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 496.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 300.0 -315.77881327305454 M 304.0 -315.77881327305454 L 304 -315.779 M 304 -315.779 A 4 4 0 1 0 296 -315.779 A 4 4 0 1 0 304 -315.779 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 350.5263157894737 -335.77699010212535 M 354.5263157894737 -335.77699010212535 L 354.526 -335.777 M 354.526 -335.777 A 4 4 0 1 0 346.526 -335.777 A 4 4 0 1 0 354.526 -335.777 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 401.0526315789474 -357.061224300925 M 405.0526315789474 -357.061224300925 L 405.053 -357.061 M 405.053 -357.061 A 4 4 0 1 0 397.053 -357.061 A 4 4 0 1 0 405.053 -357.061 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 451.57894736842104 -378.83553054736774 M 455.57894736842104 -378.83553054736774 L 455.579 -378.836 M 455.579 -378.836 A 4 4 0 1 0 447.579 -378.836 A 4 4 0 1 0 455.579 -378.836 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 502.10526315789474 -401.7418686113823 M 506.10526315789474 -401.7418686113823 L 506.105 -401.742 M 506.105 -401.742 A 4 4 0 1 0 498.105 -401.742 A 4 4 0 1 0 506.105 -401.742 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 552.6315789473684 -424.929178601341 M 556.6315789473684 -424.929178601341 L 556.632 -424.929 M 556.632 -424.929 A 4 4 0 1 0 548.632 -424.929 A 4 4 0 1 0 556.632 -424.929 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 603.1578947368421 -450.2171609434215 M 607.1578947368421 -450.2171609434215 L 607.158 -450.217 M 607.158 -450.217 A 4 4 0 1 0 599.158 -450.217 A 4 4 0 1 0 607.158 -450.217 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 653.6842105263158 -471.5170725612775 M 657.6842105263158 -471.5170725612775 L 657.684 -471.517 M 657.684 -471.517 A 4 4 0 1 0 649.684 -471.517 A 4 4 0 1 0 657.684 -471.517 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 704.2105263157895 -495.8130000416461 M 708.2105263157895 -495.8130000416461 L 708.211 -495.813 M 708.211 -495.813 A 4 4 0 1 0 700.211 -495.813 A 4 4 0 1 0 708.211 -495.813 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 754.7368421052631 -520.0 M 758.7368421052631 -520.0 L 758.737 -520 M 758.737 -520 A 4 4 0 1 0 750.737 -520 A 4 4 0 1 0 758.737 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 296.0 -309.5929331303475 L 296.0 -317.5929331303475 L 304.0 -317.5929331303475 L 304.0 -309.5929331303475 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 346.5263157894737 -325.21431050359314 L 346.5263157894737 -333.21431050359314 L 354.5263157894737 -333.21431050359314 L 354.5263157894737 -325.21431050359314 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 397.0526315789474 -341.7577542606209 L 397.0526315789474 -349.7577542606209 L 405.0526315789474 -349.7577542606209 L 405.0526315789474 -341.7577542606209 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 447.57894736842104 -360.00051826178697 L 447.57894736842104 -368.00051826178697 L 455.57894736842104 -368.00051826178697 L 455.57894736842104 -360.00051826178697 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 498.10526315789474 -375.0167370793172 L 498.10526315789474 -383.0167370793172 L 506.10526315789474 -383.0167370793172 L 506.10526315789474 -375.0167370793172 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 548.6315789473684 -395.2059951783144 L 548.6315789473684 -403.2059951783144 L 556.6315789473684 -403.2059951783144 L 556.6315789473684 -395.2059951783144 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 599.1578947368421 -412.2953999639068 L 599.1578947368421 -420.2953999639068 L 607.1578947368421 -420.2953999639068 L 607.1578947368421 -412.2953999639068 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 649.6842105263158 -432.959561698603 L 649.6842105263158 -440.959561698603 L 657.6842105263158 -440.959561698603 L 657.6842105263158 -432.959561698603 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 700.2105263157895 -449.03146126687244 L 700.2105263157895 -457.03146126687244 L 708.2105263157895 -457.03146126687244 L 708.2105263157895 -449.03146126687244 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 750.7368421052631 -466.4705539385583 L 750.7368421052631 -474.4705539385583 L 758.7368421052631 -474.4705539385583 L 758.7368421052631 -466.4705539385583 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 300.0 -295.2101787077698 L 293.75 -305.2101787077698 L 306.25 -305.2101787077698 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 350.5263157894737 -295.2983193973356 L 344.2763157894737 -305.2983193973356 L 356.7763157894737 -305.2983193973356 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 401.0526315789474 -295.4648492182113 L 394.8026315789474 -305.4648492182113 L 407.3026315789474 -305.4648492182113 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 451.57894736842104 -295.6057286436811 L 445.32894736842104 -305.6057286436811 L 457.82894736842104 -305.6057286436811 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 502.10526315789474 -295.6544355342492 L 495.85526315789474 -305.6544355342492 L 508.35526315789474 -305.6544355342492 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 552.6315789473684 -295.9897337892803 L 546.3815789473684 -305.9897337892803 L 558.8815789473684 -305.9897337892803 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 603.1578947368421 -296.0140592391732 L 596.9078947368421 -306.0140592391732 L 609.4078947368421 -306.0140592391732 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 653.6842105263158 -296.2725177805439 L 647.4342105263158 -306.2725177805439 L 659.9342105263158 -306.2725177805439 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 704.2105263157895 -296.31964674906413 L 697.9605263157895 -306.31964674906413 L 710.4605263157895 -306.31964674906413 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 754.7368421052631 -296.3573539959372 L 748.4868421052631 -306.3573539959372 L 760.9868421052631 -306.3573539959372 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 292.85714285714283 -300.09022965475435 L 300.0 -307.2330867976115 L 307.14285714285717 -300.09022965475435 L 300.0 -292.94737251189724 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 343.38345864661653 -300.08498484547005 L 350.5263157894737 -307.2278419883272 L 357.6691729323308 -300.08498484547005 L 350.5263157894737 -292.94212770261294 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 393.90977443609023 -300.0944676479707 L 401.0526315789474 -307.2373247908278 L 408.1954887218045 -300.0944676479707 L 401.0526315789474 -292.95161050511354 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 444.43609022556393 -300.0846611169467 L 451.57894736842104 -307.22751825980384 L 458.72180451127815 -300.0846611169467 L 451.57894736842104 -292.94180397408957 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 494.9624060150376 -300.11839403628755 L 502.10526315789474 -307.2612511791447 L 509.2481203007519 -300.11839403628755 L 502.10526315789474 -292.97553689343044 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 545.4887218045112 -300.0971048138191 L 552.6315789473684 -307.2399619566762 L 559.7744360902255 -300.0971048138191 L 552.6315789473684 -292.95424767096193 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 596.015037593985 -300.1169621992809 L 603.1578947368421 -307.25981934213803 L 610.3007518796992 -300.1169621992809 L 603.1578947368421 -292.97410505642375 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 646.5413533834586 -300.08552999208723 L 653.6842105263158 -307.2283871349444 L 660.827067669173 -300.08552999208723 L 653.6842105263158 -292.9426728492301 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 697.0676691729323 -300.0980892335741 L 704.2105263157895 -307.2409463764312 L 711.3533834586467 -300.0980892335741 L 704.2105263157895 -292.95523209071695 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 747.593984962406 -300.11912904255763 L 754.7368421052631 -307.26198618541474 L 761.8796992481203 -300.11912904255763 L 754.7368421052631 -292.97627189970046 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 293.75 -295.0432247312674 L 306.25 -295.0432247312674 L 300.0 -305.0432247312674 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 344.2763157894737 -295.04684372093453 L 356.7763157894737 -295.04684372093453 L 350.5263157894737 -305.04684372093453 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 394.8026315789474 -295.04227115734335 L 407.3026315789474 -295.04227115734335 L 401.0526315789474 -305.04227115734335 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 445.32894736842104 -295.0469433336264 L 457.82894736842104 -295.0469433336264 L 451.57894736842104 -305.0469433336264 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 495.85526315789474 -295.04604732840676 L 508.35526315789474 -295.04604732840676 L 502.10526315789474 -305.04604732840676 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 546.3815789473684 -295.0471711143091 L 558.8815789473684 -295.0471711143091 L 552.6315789473684 -305.0471711143091 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 596.9078947368421 -295.04698924606794 L 609.4078947368421 -295.04698924606794 L 603.1578947368421 -305.04698924606794 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 647.4342105263158 -295.0460478883146 L 659.9342105263158 -295.0460478883146 L 653.6842105263158 -305.0460478883146 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 697.9605263157895 -295.0461336051123 L 710.4605263157895 -295.0461336051123 L 704.2105263157895 -305.0461336051123 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 748.4868421052631 -295.04574742141625 L 760.9868421052631 -295.04574742141625 L 754.7368421052631 -305.04574742141625 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 300.0 -300.0300271439611 M 304.0 -300.0300271439611 L 304 -300.03 M 304 -300.03 A 4 4 0 1 0 296 -300.03 A 4 4 0 1 0 304 -300.03 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 350.5263157894737 -300.0296542453507 M 354.5263157894737 -300.0296542453507 L 354.526 -300.03 M 354.526 -300.03 A 4 4 0 1 0 346.526 -300.03 A 4 4 0 1 0 354.526 -300.03 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 401.0526315789474 -300.0288699671922 M 405.0526315789474 -300.0288699671922 L 405.053 -300.029 M 405.053 -300.029 A 4 4 0 1 0 397.053 -300.029 A 4 4 0 1 0 405.053 -300.029 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 451.57894736842104 -300.02906450971045 M 455.57894736842104 -300.02906450971045 L 455.579 -300.029 M 455.579 -300.029 A 4 4 0 1 0 447.579 -300.029 A 4 4 0 1 0 455.579 -300.029 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 502.10526315789474 -300.03071415086043 M 506.10526315789474 -300.03071415086043 L 506.105 -300.031 M 506.105 -300.031 A 4 4 0 1 0 498.105 -300.031 A 4 4 0 1 0 506.105 -300.031 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 552.6315789473684 -300.0295295895089 M 556.6315789473684 -300.0295295895089 L 556.632 -300.03 M 556.632 -300.03 A 4 4 0 1 0 548.632 -300.03 A 4 4 0 1 0 556.632 -300.03 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 603.1578947368421 -300.02903157695033 M 607.1578947368421 -300.02903157695033 L 607.158 -300.029 M 607.158 -300.029 A 4 4 0 1 0 599.158 -300.029 A 4 4 0 1 0 607.158 -300.029 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 653.6842105263158 -300.02846795337496 M 657.6842105263158 -300.02846795337496 L 657.684 -300.028 M 657.684 -300.028 A 4 4 0 1 0 649.684 -300.028 A 4 4 0 1 0 657.684 -300.028 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 704.2105263157895 -300.02902373824077 M 708.2105263157895 -300.02902373824077 L 708.211 -300.029 M 708.211 -300.029 A 4 4 0 1 0 700.211 -300.029 A 4 4 0 1 0 708.211 -300.029 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 754.7368421052631 -300.02928440078296 M 758.7368421052631 -300.02928440078296 L 758.737 -300.029 M 758.737 -300.029 A 4 4 0 1 0 750.737 -300.029 A 4 4 0 1 0 758.737 -300.029 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 307.0 -172.66666666666669 M 311.0 -172.66666666666669 L 311 -172.667 M 311 -172.667 A 4 4 0 1 0 303 -172.667 A 4 4 0 1 0 311 -172.667 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 299.85714285714283 -118.66666666666666 L 307.0 -125.8095238095238 L 314.14285714285717 -118.66666666666666 L 307.0 -111.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 300.75 -77.66666666666666 L 313.25 -77.66666666666666 L 307.0 -87.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 307.0 -64.66666666666666 M 311.0 -64.66666666666666 L 311 -64.6667 M 311 -64.6667 A 4 4 0 1 0 303 -64.6667 A 4 4 0 1 0 311 -64.6667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 100
+ </text>
+ <path d="M 401.0526315789474 -300 L 401.0526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,401.053,-279.001)" x="401.0526315789474" y="-279.00097346438844">
+ 300
+ </text>
+ <path d="M 502.10526315789474 -300 L 502.10526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,502.105,-279.001)" x="502.10526315789474" y="-279.00097346438844">
+ 500
+ </text>
+ <path d="M 603.1578947368421 -300 L 603.1578947368421 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,603.158,-279.001)" x="603.1578947368421" y="-279.00097346438844">
+ 700
+ </text>
+ <path d="M 704.2105263157895 -300 L 704.2105263157895 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,704.211,-279.001)" x="704.2105263157895" y="-279.00097346438844">
+ 900
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 8.64e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.73e-04
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.59e-04
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.46e-04
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.32e-04
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 300.0 -315.77881327305454 L 350.5263157894737 -335.77699010212535 L 401.0526315789474 -357.061224300925 L 451.57894736842104 -378.83553054736774 L 502.10526315789474 -401.7418686113823 L 552.6315789473684 -424.929178601341 L 603.1578947368421 -450.2171609434215 L 653.6842105263158 -471.5170725612775 L 704.2105263157895 -495.8130000416461 L 754.7368421052631 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 292.0 -307.77881327305454 L 292.0 -323.77881327305454 L 308.0 -323.77881327305454 L 308.0 -307.77881327305454 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -315.77881327305454 M 304.0 -315.77881327305454 L 304 -315.779 M 304 -315.779 A 4 4 0 1 0 296 -315.779 A 4 4 0 1 0 304 -315.779 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 342.5263157894737 -327.77699010212535 L 342.5263157894737 -343.77699010212535 L 358.5263157894737 -343.77699010212535 L 358.5263157894737 -327.77699010212535 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -335.77699010212535 M 354.5263157894737 -335.77699010212535 L 354.526 -335.777 M 354.526 -335.777 A 4 4 0 1 0 346.526 -335.777 A 4 4 0 1 0 354.526 -335.777 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 393.0526315789474 -349.061224300925 L 393.0526315789474 -365.061224300925 L 409.0526315789474 -365.061224300925 L 409.0526315789474 -349.061224300925 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -357.061224300925 M 405.0526315789474 -357.061224300925 L 405.053 -357.061 M 405.053 -357.061 A 4 4 0 1 0 397.053 -357.061 A 4 4 0 1 0 405.053 -357.061 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 443.57894736842104 -370.83553054736774 L 443.57894736842104 -386.83553054736774 L 459.57894736842104 -386.83553054736774 L 459.57894736842104 -370.83553054736774 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -378.83553054736774 M 455.57894736842104 -378.83553054736774 L 455.579 -378.836 M 455.579 -378.836 A 4 4 0 1 0 447.579 -378.836 A 4 4 0 1 0 455.579 -378.836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 494.10526315789474 -393.7418686113823 L 494.10526315789474 -409.7418686113823 L 510.10526315789474 -409.7418686113823 L 510.10526315789474 -393.7418686113823 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -401.7418686113823 M 506.10526315789474 -401.7418686113823 L 506.105 -401.742 M 506.105 -401.742 A 4 4 0 1 0 498.105 -401.742 A 4 4 0 1 0 506.105 -401.742 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 544.6315789473684 -416.929178601341 L 544.6315789473684 -432.929178601341 L 560.6315789473684 -432.929178601341 L 560.6315789473684 -416.929178601341 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -424.929178601341 M 556.6315789473684 -424.929178601341 L 556.632 -424.929 M 556.632 -424.929 A 4 4 0 1 0 548.632 -424.929 A 4 4 0 1 0 556.632 -424.929 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 595.1578947368421 -442.2171609434215 L 595.1578947368421 -458.2171609434215 L 611.1578947368421 -458.2171609434215 L 611.1578947368421 -442.2171609434215 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -450.2171609434215 M 607.1578947368421 -450.2171609434215 L 607.158 -450.217 M 607.158 -450.217 A 4 4 0 1 0 599.158 -450.217 A 4 4 0 1 0 607.158 -450.217 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 645.6842105263158 -463.5170725612775 L 645.6842105263158 -479.5170725612775 L 661.6842105263158 -479.5170725612775 L 661.6842105263158 -463.5170725612775 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -471.5170725612775 M 657.6842105263158 -471.5170725612775 L 657.684 -471.517 M 657.684 -471.517 A 4 4 0 1 0 649.684 -471.517 A 4 4 0 1 0 657.684 -471.517 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 696.2105263157895 -487.8130000416461 L 696.2105263157895 -503.8130000416461 L 712.2105263157895 -503.8130000416461 L 712.2105263157895 -487.8130000416461 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -495.8130000416461 M 708.2105263157895 -495.8130000416461 L 708.211 -495.813 M 708.211 -495.813 A 4 4 0 1 0 700.211 -495.813 A 4 4 0 1 0 708.211 -495.813 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 746.7368421052631 -512.0 L 746.7368421052631 -528.0 L 762.7368421052631 -528.0 L 762.7368421052631 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -520.0 M 758.7368421052631 -520.0 L 758.737 -520 M 758.737 -520 A 4 4 0 1 0 750.737 -520 A 4 4 0 1 0 758.737 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 300.0 -313.5929331303475 L 350.5263157894737 -329.21431050359314 L 401.0526315789474 -345.7577542606209 L 451.57894736842104 -364.00051826178697 L 502.10526315789474 -379.0167370793172 L 552.6315789473684 -399.2059951783144 L 603.1578947368421 -416.2953999639068 L 653.6842105263158 -436.959561698603 L 704.2105263157895 -453.03146126687244 L 754.7368421052631 -470.4705539385583" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 296.0 -309.5929331303475 L 296.0 -317.5929331303475 L 304.0 -317.5929331303475 L 304.0 -309.5929331303475 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 296.0 -309.5929331303475 L 296.0 -317.5929331303475 L 304.0 -317.5929331303475 L 304.0 -309.5929331303475 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 346.5263157894737 -325.21431050359314 L 346.5263157894737 -333.21431050359314 L 354.5263157894737 -333.21431050359314 L 354.5263157894737 -325.21431050359314 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 346.5263157894737 -325.21431050359314 L 346.5263157894737 -333.21431050359314 L 354.5263157894737 -333.21431050359314 L 354.5263157894737 -325.21431050359314 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 397.0526315789474 -341.7577542606209 L 397.0526315789474 -349.7577542606209 L 405.0526315789474 -349.7577542606209 L 405.0526315789474 -341.7577542606209 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 397.0526315789474 -341.7577542606209 L 397.0526315789474 -349.7577542606209 L 405.0526315789474 -349.7577542606209 L 405.0526315789474 -341.7577542606209 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.57894736842104 -360.00051826178697 L 447.57894736842104 -368.00051826178697 L 455.57894736842104 -368.00051826178697 L 455.57894736842104 -360.00051826178697 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.57894736842104 -360.00051826178697 L 447.57894736842104 -368.00051826178697 L 455.57894736842104 -368.00051826178697 L 455.57894736842104 -360.00051826178697 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 498.10526315789474 -375.0167370793172 L 498.10526315789474 -383.0167370793172 L 506.10526315789474 -383.0167370793172 L 506.10526315789474 -375.0167370793172 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 498.10526315789474 -375.0167370793172 L 498.10526315789474 -383.0167370793172 L 506.10526315789474 -383.0167370793172 L 506.10526315789474 -375.0167370793172 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 548.6315789473684 -395.2059951783144 L 548.6315789473684 -403.2059951783144 L 556.6315789473684 -403.2059951783144 L 556.6315789473684 -395.2059951783144 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 548.6315789473684 -395.2059951783144 L 548.6315789473684 -403.2059951783144 L 556.6315789473684 -403.2059951783144 L 556.6315789473684 -395.2059951783144 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 599.1578947368421 -412.2953999639068 L 599.1578947368421 -420.2953999639068 L 607.1578947368421 -420.2953999639068 L 607.1578947368421 -412.2953999639068 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 599.1578947368421 -412.2953999639068 L 599.1578947368421 -420.2953999639068 L 607.1578947368421 -420.2953999639068 L 607.1578947368421 -412.2953999639068 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 649.6842105263158 -432.959561698603 L 649.6842105263158 -440.959561698603 L 657.6842105263158 -440.959561698603 L 657.6842105263158 -432.959561698603 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 649.6842105263158 -432.959561698603 L 649.6842105263158 -440.959561698603 L 657.6842105263158 -440.959561698603 L 657.6842105263158 -432.959561698603 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 700.2105263157895 -449.03146126687244 L 700.2105263157895 -457.03146126687244 L 708.2105263157895 -457.03146126687244 L 708.2105263157895 -449.03146126687244 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 700.2105263157895 -449.03146126687244 L 700.2105263157895 -457.03146126687244 L 708.2105263157895 -457.03146126687244 L 708.2105263157895 -449.03146126687244 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 750.7368421052631 -466.4705539385583 L 750.7368421052631 -474.4705539385583 L 758.7368421052631 -474.4705539385583 L 758.7368421052631 -466.4705539385583 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 750.7368421052631 -466.4705539385583 L 750.7368421052631 -474.4705539385583 L 758.7368421052631 -474.4705539385583 L 758.7368421052631 -466.4705539385583 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 300.0 -300.2101787077698 L 350.5263157894737 -300.2983193973356 L 401.0526315789474 -300.4648492182113 L 451.57894736842104 -300.6057286436811 L 502.10526315789474 -300.6544355342492 L 552.6315789473684 -300.9897337892803 L 603.1578947368421 -301.0140592391732 L 653.6842105263158 -301.2725177805439 L 704.2105263157895 -301.31964674906413 L 754.7368421052631 -301.3573539959372" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 293.75 -295.2101787077698 L 293.75 -305.2101787077698 L 306.25 -305.2101787077698 L 306.25 -295.2101787077698 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -295.2101787077698 L 293.75 -305.2101787077698 L 306.25 -305.2101787077698 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 344.2763157894737 -295.2983193973356 L 344.2763157894737 -305.2983193973356 L 356.7763157894737 -305.2983193973356 L 356.7763157894737 -295.2983193973356 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -295.2983193973356 L 344.2763157894737 -305.2983193973356 L 356.7763157894737 -305.2983193973356 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 394.8026315789474 -295.4648492182113 L 394.8026315789474 -305.4648492182113 L 407.3026315789474 -305.4648492182113 L 407.3026315789474 -295.4648492182113 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -295.4648492182113 L 394.8026315789474 -305.4648492182113 L 407.3026315789474 -305.4648492182113 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 445.32894736842104 -295.6057286436811 L 445.32894736842104 -305.6057286436811 L 457.82894736842104 -305.6057286436811 L 457.82894736842104 -295.6057286436811 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -295.6057286436811 L 445.32894736842104 -305.6057286436811 L 457.82894736842104 -305.6057286436811 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 495.85526315789474 -295.6544355342492 L 495.85526315789474 -305.6544355342492 L 508.35526315789474 -305.6544355342492 L 508.35526315789474 -295.6544355342492 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -295.6544355342492 L 495.85526315789474 -305.6544355342492 L 508.35526315789474 -305.6544355342492 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 546.3815789473684 -295.9897337892803 L 546.3815789473684 -305.9897337892803 L 558.8815789473684 -305.9897337892803 L 558.8815789473684 -295.9897337892803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -295.9897337892803 L 546.3815789473684 -305.9897337892803 L 558.8815789473684 -305.9897337892803 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 596.9078947368421 -296.0140592391732 L 596.9078947368421 -306.0140592391732 L 609.4078947368421 -306.0140592391732 L 609.4078947368421 -296.0140592391732 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -296.0140592391732 L 596.9078947368421 -306.0140592391732 L 609.4078947368421 -306.0140592391732 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 647.4342105263158 -296.2725177805439 L 647.4342105263158 -306.2725177805439 L 659.9342105263158 -306.2725177805439 L 659.9342105263158 -296.2725177805439 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -296.2725177805439 L 647.4342105263158 -306.2725177805439 L 659.9342105263158 -306.2725177805439 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 697.9605263157895 -296.31964674906413 L 697.9605263157895 -306.31964674906413 L 710.4605263157895 -306.31964674906413 L 710.4605263157895 -296.31964674906413 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -296.31964674906413 L 697.9605263157895 -306.31964674906413 L 710.4605263157895 -306.31964674906413 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 748.4868421052631 -296.3573539959372 L 748.4868421052631 -306.3573539959372 L 760.9868421052631 -306.3573539959372 L 760.9868421052631 -296.3573539959372 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -296.3573539959372 L 748.4868421052631 -306.3573539959372 L 760.9868421052631 -306.3573539959372 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 300.0 -300.09022965475435 L 350.5263157894737 -300.08498484547005 L 401.0526315789474 -300.0944676479707 L 451.57894736842104 -300.0846611169467 L 502.10526315789474 -300.11839403628755 L 552.6315789473684 -300.0971048138191 L 603.1578947368421 -300.1169621992809 L 653.6842105263158 -300.08552999208723 L 704.2105263157895 -300.0980892335741 L 754.7368421052631 -300.11912904255763" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 292.85714285714283 -292.94737251189724 L 292.85714285714283 -307.2330867976115 L 307.14285714285717 -307.2330867976115 L 307.14285714285717 -292.94737251189724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 292.85714285714283 -300.09022965475435 L 300.0 -307.2330867976115 L 307.14285714285717 -300.09022965475435 L 300.0 -292.94737251189724 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 343.38345864661653 -292.94212770261294 L 343.38345864661653 -307.2278419883272 L 357.6691729323308 -307.2278419883272 L 357.6691729323308 -292.94212770261294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 343.38345864661653 -300.08498484547005 L 350.5263157894737 -307.2278419883272 L 357.6691729323308 -300.08498484547005 L 350.5263157894737 -292.94212770261294 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 393.90977443609023 -292.95161050511354 L 393.90977443609023 -307.2373247908278 L 408.1954887218045 -307.2373247908278 L 408.1954887218045 -292.95161050511354 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 393.90977443609023 -300.0944676479707 L 401.0526315789474 -307.2373247908278 L 408.1954887218045 -300.0944676479707 L 401.0526315789474 -292.95161050511354 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 444.43609022556393 -292.94180397408957 L 444.43609022556393 -307.22751825980384 L 458.72180451127815 -307.22751825980384 L 458.72180451127815 -292.94180397408957 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 444.43609022556393 -300.0846611169467 L 451.57894736842104 -307.22751825980384 L 458.72180451127815 -300.0846611169467 L 451.57894736842104 -292.94180397408957 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 494.9624060150376 -292.97553689343044 L 494.9624060150376 -307.2612511791447 L 509.2481203007519 -307.2612511791447 L 509.2481203007519 -292.97553689343044 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 494.9624060150376 -300.11839403628755 L 502.10526315789474 -307.2612511791447 L 509.2481203007519 -300.11839403628755 L 502.10526315789474 -292.97553689343044 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 545.4887218045112 -292.95424767096193 L 545.4887218045112 -307.2399619566762 L 559.7744360902255 -307.2399619566762 L 559.7744360902255 -292.95424767096193 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 545.4887218045112 -300.0971048138191 L 552.6315789473684 -307.2399619566762 L 559.7744360902255 -300.0971048138191 L 552.6315789473684 -292.95424767096193 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 596.015037593985 -292.97410505642375 L 596.015037593985 -307.25981934213803 L 610.3007518796992 -307.25981934213803 L 610.3007518796992 -292.97410505642375 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 596.015037593985 -300.1169621992809 L 603.1578947368421 -307.25981934213803 L 610.3007518796992 -300.1169621992809 L 603.1578947368421 -292.97410505642375 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 646.5413533834586 -292.9426728492301 L 646.5413533834586 -307.2283871349444 L 660.827067669173 -307.2283871349444 L 660.827067669173 -292.9426728492301 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 646.5413533834586 -300.08552999208723 L 653.6842105263158 -307.2283871349444 L 660.827067669173 -300.08552999208723 L 653.6842105263158 -292.9426728492301 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 697.0676691729323 -292.95523209071695 L 697.0676691729323 -307.2409463764312 L 711.3533834586467 -307.2409463764312 L 711.3533834586467 -292.95523209071695 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 697.0676691729323 -300.0980892335741 L 704.2105263157895 -307.2409463764312 L 711.3533834586467 -300.0980892335741 L 704.2105263157895 -292.95523209071695 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 747.593984962406 -292.97627189970046 L 747.593984962406 -307.26198618541474 L 761.8796992481203 -307.26198618541474 L 761.8796992481203 -292.97627189970046 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 747.593984962406 -300.11912904255763 L 754.7368421052631 -307.26198618541474 L 761.8796992481203 -300.11912904255763 L 754.7368421052631 -292.97627189970046 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 300.0 -300.0572388677831 L 350.5263157894737 -300.05486842166147 L 401.0526315789474 -300.0548862369104 L 451.57894736842104 -300.05547566714637 L 502.10526315789474 -300.06506179809077 L 552.6315789473684 -300.06325584085664 L 603.1578947368421 -300.06544508044624 L 653.6842105263158 -300.0597426737681 L 704.2105263157895 -300.0611729837534 L 754.7368421052631 -300.0593263059503" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <path d="M 292.85714285714283 -300.0572388677831 L 307.14285714285717 -300.0572388677831" style="stroke-width:1;"/>
+ <path d="M 300.0 -292.91438172492593 L 300.0 -307.2000960106402" style="stroke-width:1;"/>
+ <path d="M 343.38345864661653 -300.05486842166147 L 357.6691729323308 -300.05486842166147" style="stroke-width:1;"/>
+ <path d="M 350.5263157894737 -292.91201127880436 L 350.5263157894737 -307.19772556451863" style="stroke-width:1;"/>
+ <path d="M 393.90977443609023 -300.0548862369104 L 408.1954887218045 -300.0548862369104" style="stroke-width:1;"/>
+ <path d="M 401.0526315789474 -292.91202909405325 L 401.0526315789474 -307.1977433797676" style="stroke-width:1;"/>
+ <path d="M 444.43609022556393 -300.05547566714637 L 458.72180451127815 -300.05547566714637" style="stroke-width:1;"/>
+ <path d="M 451.57894736842104 -292.9126185242892 L 451.57894736842104 -307.19833281000354" style="stroke-width:1;"/>
+ <path d="M 494.9624060150376 -300.06506179809077 L 509.2481203007519 -300.06506179809077" style="stroke-width:1;"/>
+ <path d="M 502.10526315789474 -292.9222046552336 L 502.10526315789474 -307.2079189409479" style="stroke-width:1;"/>
+ <path d="M 545.4887218045112 -300.06325584085664 L 559.7744360902255 -300.06325584085664" style="stroke-width:1;"/>
+ <path d="M 552.6315789473684 -292.9203986979995 L 552.6315789473684 -307.20611298371375" style="stroke-width:1;"/>
+ <path d="M 596.015037593985 -300.06544508044624 L 610.3007518796992 -300.06544508044624" style="stroke-width:1;"/>
+ <path d="M 603.1578947368421 -292.9225879375891 L 603.1578947368421 -307.2083022233034" style="stroke-width:1;"/>
+ <path d="M 646.5413533834586 -300.0597426737681 L 660.827067669173 -300.0597426737681" style="stroke-width:1;"/>
+ <path d="M 653.6842105263158 -292.9168855309109 L 653.6842105263158 -307.20259981662525" style="stroke-width:1;"/>
+ <path d="M 697.0676691729323 -300.0611729837534 L 711.3533834586467 -300.0611729837534" style="stroke-width:1;"/>
+ <path d="M 704.2105263157895 -292.9183158408963 L 704.2105263157895 -307.2040301266106" style="stroke-width:1;"/>
+ <path d="M 747.593984962406 -300.0593263059503 L 761.8796992481203 -300.0593263059503" style="stroke-width:1;"/>
+ <path d="M 754.7368421052631 -292.91646916309315 L 754.7368421052631 -307.20218344880743" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip51);">
+ <path d="M 300.0 -300.0432247312674 L 350.5263157894737 -300.04684372093453 L 401.0526315789474 -300.04227115734335 L 451.57894736842104 -300.0469433336264 L 502.10526315789474 -300.04604732840676 L 552.6315789473684 -300.0471711143091 L 603.1578947368421 -300.04698924606794 L 653.6842105263158 -300.0460478883146 L 704.2105263157895 -300.0461336051123 L 754.7368421052631 -300.04574742141625" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip52);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 293.75 -295.0432247312674 L 293.75 -305.0432247312674 L 306.25 -305.0432247312674 L 306.25 -295.0432247312674 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 293.75 -295.0432247312674 L 306.25 -295.0432247312674 L 300.0 -305.0432247312674 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 344.2763157894737 -295.04684372093453 L 344.2763157894737 -305.04684372093453 L 356.7763157894737 -305.04684372093453 L 356.7763157894737 -295.04684372093453 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 344.2763157894737 -295.04684372093453 L 356.7763157894737 -295.04684372093453 L 350.5263157894737 -305.04684372093453 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 394.8026315789474 -295.04227115734335 L 394.8026315789474 -305.04227115734335 L 407.3026315789474 -305.04227115734335 L 407.3026315789474 -295.04227115734335 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 394.8026315789474 -295.04227115734335 L 407.3026315789474 -295.04227115734335 L 401.0526315789474 -305.04227115734335 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 445.32894736842104 -295.0469433336264 L 445.32894736842104 -305.0469433336264 L 457.82894736842104 -305.0469433336264 L 457.82894736842104 -295.0469433336264 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 445.32894736842104 -295.0469433336264 L 457.82894736842104 -295.0469433336264 L 451.57894736842104 -305.0469433336264 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 495.85526315789474 -295.04604732840676 L 495.85526315789474 -305.04604732840676 L 508.35526315789474 -305.04604732840676 L 508.35526315789474 -295.04604732840676 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 495.85526315789474 -295.04604732840676 L 508.35526315789474 -295.04604732840676 L 502.10526315789474 -305.04604732840676 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 546.3815789473684 -295.0471711143091 L 546.3815789473684 -305.0471711143091 L 558.8815789473684 -305.0471711143091 L 558.8815789473684 -295.0471711143091 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 546.3815789473684 -295.0471711143091 L 558.8815789473684 -295.0471711143091 L 552.6315789473684 -305.0471711143091 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 596.9078947368421 -295.04698924606794 L 596.9078947368421 -305.04698924606794 L 609.4078947368421 -305.04698924606794 L 609.4078947368421 -295.04698924606794 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 596.9078947368421 -295.04698924606794 L 609.4078947368421 -295.04698924606794 L 603.1578947368421 -305.04698924606794 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 647.4342105263158 -295.0460478883146 L 647.4342105263158 -305.0460478883146 L 659.9342105263158 -305.0460478883146 L 659.9342105263158 -295.0460478883146 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 647.4342105263158 -295.0460478883146 L 659.9342105263158 -295.0460478883146 L 653.6842105263158 -305.0460478883146 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip61);">
+ <path d="M 697.9605263157895 -295.0461336051123 L 697.9605263157895 -305.0461336051123 L 710.4605263157895 -305.0461336051123 L 710.4605263157895 -295.0461336051123 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 697.9605263157895 -295.0461336051123 L 710.4605263157895 -295.0461336051123 L 704.2105263157895 -305.0461336051123 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip62);">
+ <path d="M 748.4868421052631 -295.04574742141625 L 748.4868421052631 -305.04574742141625 L 760.9868421052631 -305.04574742141625 L 760.9868421052631 -295.04574742141625 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 748.4868421052631 -295.04574742141625 L 760.9868421052631 -295.04574742141625 L 754.7368421052631 -305.04574742141625 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 300.0 -300.0300271439611 L 350.5263157894737 -300.0296542453507 L 401.0526315789474 -300.0288699671922 L 451.57894736842104 -300.02906450971045 L 502.10526315789474 -300.03071415086043 L 552.6315789473684 -300.0295295895089 L 603.1578947368421 -300.02903157695033 L 653.6842105263158 -300.02846795337496 L 704.2105263157895 -300.02902373824077 L 754.7368421052631 -300.02928440078296" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 292.0 -292.0300271439611 L 292.0 -308.0300271439611 L 308.0 -308.0300271439611 L 308.0 -292.0300271439611 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -300.0300271439611 M 304.0 -300.0300271439611 L 304 -300.03 M 304 -300.03 A 4 4 0 1 0 296 -300.03 A 4 4 0 1 0 304 -300.03 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 342.5263157894737 -292.0296542453507 L 342.5263157894737 -308.0296542453507 L 358.5263157894737 -308.0296542453507 L 358.5263157894737 -292.0296542453507 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -300.0296542453507 M 354.5263157894737 -300.0296542453507 L 354.526 -300.03 M 354.526 -300.03 A 4 4 0 1 0 346.526 -300.03 A 4 4 0 1 0 354.526 -300.03 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 393.0526315789474 -292.0288699671922 L 393.0526315789474 -308.0288699671922 L 409.0526315789474 -308.0288699671922 L 409.0526315789474 -292.0288699671922 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -300.0288699671922 M 405.0526315789474 -300.0288699671922 L 405.053 -300.029 M 405.053 -300.029 A 4 4 0 1 0 397.053 -300.029 A 4 4 0 1 0 405.053 -300.029 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 443.57894736842104 -292.02906450971045 L 443.57894736842104 -308.02906450971045 L 459.57894736842104 -308.02906450971045 L 459.57894736842104 -292.02906450971045 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -300.02906450971045 M 455.57894736842104 -300.02906450971045 L 455.579 -300.029 M 455.579 -300.029 A 4 4 0 1 0 447.579 -300.029 A 4 4 0 1 0 455.579 -300.029 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 494.10526315789474 -292.03071415086043 L 494.10526315789474 -308.03071415086043 L 510.10526315789474 -308.03071415086043 L 510.10526315789474 -292.03071415086043 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -300.03071415086043 M 506.10526315789474 -300.03071415086043 L 506.105 -300.031 M 506.105 -300.031 A 4 4 0 1 0 498.105 -300.031 A 4 4 0 1 0 506.105 -300.031 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 544.6315789473684 -292.0295295895089 L 544.6315789473684 -308.0295295895089 L 560.6315789473684 -308.0295295895089 L 560.6315789473684 -292.0295295895089 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -300.0295295895089 M 556.6315789473684 -300.0295295895089 L 556.632 -300.03 M 556.632 -300.03 A 4 4 0 1 0 548.632 -300.03 A 4 4 0 1 0 556.632 -300.03 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 595.1578947368421 -292.02903157695033 L 595.1578947368421 -308.02903157695033 L 611.1578947368421 -308.02903157695033 L 611.1578947368421 -292.02903157695033 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -300.02903157695033 M 607.1578947368421 -300.02903157695033 L 607.158 -300.029 M 607.158 -300.029 A 4 4 0 1 0 599.158 -300.029 A 4 4 0 1 0 607.158 -300.029 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 645.6842105263158 -292.02846795337496 L 645.6842105263158 -308.02846795337496 L 661.6842105263158 -308.02846795337496 L 661.6842105263158 -292.02846795337496 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -300.02846795337496 M 657.6842105263158 -300.02846795337496 L 657.684 -300.028 M 657.684 -300.028 A 4 4 0 1 0 649.684 -300.028 A 4 4 0 1 0 657.684 -300.028 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip73);">
+ <path d="M 696.2105263157895 -292.02902373824077 L 696.2105263157895 -308.02902373824077 L 712.2105263157895 -308.02902373824077 L 712.2105263157895 -292.02902373824077 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -300.02902373824077 M 708.2105263157895 -300.02902373824077 L 708.211 -300.029 M 708.211 -300.029 A 4 4 0 1 0 700.211 -300.029 A 4 4 0 1 0 708.211 -300.029 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip74);">
+ <path d="M 746.7368421052631 -292.02928440078296 L 746.7368421052631 -308.02928440078296 L 762.7368421052631 -308.02928440078296 L 762.7368421052631 -292.02928440078296 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -300.02928440078296 M 758.7368421052631 -300.02928440078296 L 758.737 -300.029 M 758.737 -300.029 A 4 4 0 1 0 750.737 -300.029 A 4 4 0 1 0 758.737 -300.029 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 299.0 -164.66666666666669 L 299.0 -180.66666666666669 L 315.0 -180.66666666666669 L 315.0 -164.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -172.66666666666669 M 311.0 -172.66666666666669 L 311 -172.667 M 311 -172.667 A 4 4 0 1 0 303 -172.667 A 4 4 0 1 0 311 -172.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -150.66666666666666 L 303.0 -158.66666666666666 L 311.0 -158.66666666666666 L 311.0 -150.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 300.75 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 L 313.25 -131.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ binary_heap
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 299.85714285714283 -111.52380952380952 L 299.85714285714283 -125.8095238095238 L 314.14285714285717 -125.8095238095238 L 314.14285714285717 -111.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -118.66666666666666 L 307.0 -125.8095238095238 L 314.14285714285717 -118.66666666666666 L 307.0 -111.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -100.66666666666666 L 314.14285714285717 -100.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -93.52380952380952 L 307.0 -107.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 300.75 -77.66666666666666 L 300.75 -87.66666666666666 L 313.25 -87.66666666666666 L 313.25 -77.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -77.66666666666666 L 313.25 -77.66666666666666 L 307.0 -87.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 299.0 -56.66666666666666 L 299.0 -72.66666666666666 L 315.0 -72.66666666666666 L 315.0 -56.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -64.66666666666666 M 311.0 -64.66666666666666 L 311 -64.6667 M 311 -64.6667 A 4 4 0 1 0 303 -64.6667 A 4 4 0 1 0 311 -64.6667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ thin_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 396.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 300.0 -400.93916343895347 M 304.0 -400.93916343895347 L 304 -400.939 M 304 -400.939 A 4 4 0 1 0 296 -400.939 A 4 4 0 1 0 304 -400.939 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 350.5263157894737 -399.685628509652 M 354.5263157894737 -399.685628509652 L 354.526 -399.686 M 354.526 -399.686 A 4 4 0 1 0 346.526 -399.686 A 4 4 0 1 0 354.526 -399.686 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 401.0526315789474 -397.0492012381975 M 405.0526315789474 -397.0492012381975 L 405.053 -397.049 M 405.053 -397.049 A 4 4 0 1 0 397.053 -397.049 A 4 4 0 1 0 405.053 -397.049 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 451.57894736842104 -397.70317482539235 M 455.57894736842104 -397.70317482539235 L 455.579 -397.703 M 455.579 -397.703 A 4 4 0 1 0 447.579 -397.703 A 4 4 0 1 0 455.579 -397.703 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 502.10526315789474 -403.24860391681057 M 506.10526315789474 -403.24860391681057 L 506.105 -403.249 M 506.105 -403.249 A 4 4 0 1 0 498.105 -403.249 A 4 4 0 1 0 506.105 -403.249 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 552.6315789473684 -399.26658577939554 M 556.6315789473684 -399.26658577939554 L 556.632 -399.267 M 556.632 -399.267 A 4 4 0 1 0 548.632 -399.267 A 4 4 0 1 0 556.632 -399.267 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 603.1578947368421 -397.592468150637 M 607.1578947368421 -397.592468150637 L 607.158 -397.592 M 607.158 -397.592 A 4 4 0 1 0 599.158 -397.592 A 4 4 0 1 0 607.158 -397.592 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 653.6842105263158 -395.69779271081245 M 657.6842105263158 -395.69779271081245 L 657.684 -395.698 M 657.684 -395.698 A 4 4 0 1 0 649.684 -395.698 A 4 4 0 1 0 657.684 -395.698 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 704.2105263157895 -397.56611756653757 M 708.2105263157895 -397.56611756653757 L 708.211 -397.566 M 708.211 -397.566 A 4 4 0 1 0 700.211 -397.566 A 4 4 0 1 0 708.211 -397.566 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 754.7368421052631 -398.44236004168806 M 758.7368421052631 -398.44236004168806 L 758.737 -398.442 M 758.737 -398.442 A 4 4 0 1 0 750.737 -398.442 A 4 4 0 1 0 758.737 -398.442 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 307.0 -164.66666666666666 M 311.0 -164.66666666666666 L 311 -164.667 M 311 -164.667 A 4 4 0 1 0 303 -164.667 A 4 4 0 1 0 311 -164.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 100
+ </text>
+ <path d="M 401.0526315789474 -300 L 401.0526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,401.053,-279.001)" x="401.0526315789474" y="-279.00097346438844">
+ 300
+ </text>
+ <path d="M 502.10526315789474 -300 L 502.10526315789474 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,502.105,-279.001)" x="502.10526315789474" y="-279.00097346438844">
+ 500
+ </text>
+ <path d="M 603.1578947368421 -300 L 603.1578947368421 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,603.158,-279.001)" x="603.1578947368421" y="-279.00097346438844">
+ 700
+ </text>
+ <path d="M 704.2105263157895 -300 L 704.2105263157895 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,704.211,-279.001)" x="704.2105263157895" y="-279.00097346438844">
+ 900
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -471.10768895733196 L 780 -471.10768895733196" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 2.57e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 5.14e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 7.71e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.03e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 1.29e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 300.0 -492.41401838629895 L 350.5263157894737 -484.445533311556 L 401.0526315789474 -484.50542100269104 L 451.57894736842104 -486.486848040817 L 502.10526315789474 -518.7115591021513 L 552.6315789473684 -512.6406582979452 L 603.1578947368421 -520.0 L 653.6842105263158 -500.83080560611006 L 704.2105263157895 -505.6389316658111 L 754.7368421052631 -499.4311447104391" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 292.85714285714283 -492.41401838629895 L 307.14285714285717 -492.41401838629895" style="stroke-width:1;"/>
+ <path d="M 300.0 -485.2711612434418 L 300.0 -499.55687552915606" style="stroke-width:1;"/>
+ <path d="M 343.38345864661653 -484.445533311556 L 357.6691729323308 -484.445533311556" style="stroke-width:1;"/>
+ <path d="M 350.5263157894737 -477.30267616869884 L 350.5263157894737 -491.5883904544131" style="stroke-width:1;"/>
+ <path d="M 393.90977443609023 -484.50542100269104 L 408.1954887218045 -484.50542100269104" style="stroke-width:1;"/>
+ <path d="M 401.0526315789474 -477.3625638598339 L 401.0526315789474 -491.6482781455482" style="stroke-width:1;"/>
+ <path d="M 444.43609022556393 -486.486848040817 L 458.72180451127815 -486.486848040817" style="stroke-width:1;"/>
+ <path d="M 451.57894736842104 -479.3439908979598 L 451.57894736842104 -493.6297051836741" style="stroke-width:1;"/>
+ <path d="M 494.9624060150376 -518.7115591021513 L 509.2481203007519 -518.7115591021513" style="stroke-width:1;"/>
+ <path d="M 502.10526315789474 -511.5687019592941 L 502.10526315789474 -525.8544162450085" style="stroke-width:1;"/>
+ <path d="M 545.4887218045112 -512.6406582979452 L 559.7744360902255 -512.6406582979452" style="stroke-width:1;"/>
+ <path d="M 552.6315789473684 -505.497801155088 L 552.6315789473684 -519.7835154408023" style="stroke-width:1;"/>
+ <path d="M 596.015037593985 -520.0 L 610.3007518796992 -520.0" style="stroke-width:1;"/>
+ <path d="M 603.1578947368421 -512.8571428571429 L 603.1578947368421 -527.1428571428571" style="stroke-width:1;"/>
+ <path d="M 646.5413533834586 -500.83080560611006 L 660.827067669173 -500.83080560611006" style="stroke-width:1;"/>
+ <path d="M 653.6842105263158 -493.68794846325295 L 653.6842105263158 -507.97366274896723" style="stroke-width:1;"/>
+ <path d="M 697.0676691729323 -505.6389316658111 L 711.3533834586467 -505.6389316658111" style="stroke-width:1;"/>
+ <path d="M 704.2105263157895 -498.496074522954 L 704.2105263157895 -512.7817888086684" style="stroke-width:1;"/>
+ <path d="M 747.593984962406 -499.4311447104391 L 761.8796992481203 -499.4311447104391" style="stroke-width:1;"/>
+ <path d="M 754.7368421052631 -492.28828756758196 L 754.7368421052631 -506.5740018532963" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 300.0 -400.93916343895347 L 350.5263157894737 -399.685628509652 L 401.0526315789474 -397.0492012381975 L 451.57894736842104 -397.70317482539235 L 502.10526315789474 -403.24860391681057 L 552.6315789473684 -399.26658577939554 L 603.1578947368421 -397.592468150637 L 653.6842105263158 -395.69779271081245 L 704.2105263157895 -397.56611756653757 L 754.7368421052631 -398.44236004168806" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 292.0 -392.93916343895347 L 292.0 -408.93916343895347 L 308.0 -408.93916343895347 L 308.0 -392.93916343895347 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.0 -400.93916343895347 M 304.0 -400.93916343895347 L 304 -400.939 M 304 -400.939 A 4 4 0 1 0 296 -400.939 A 4 4 0 1 0 304 -400.939 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 342.5263157894737 -391.685628509652 L 342.5263157894737 -407.685628509652 L 358.5263157894737 -407.685628509652 L 358.5263157894737 -391.685628509652 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 350.5263157894737 -399.685628509652 M 354.5263157894737 -399.685628509652 L 354.526 -399.686 M 354.526 -399.686 A 4 4 0 1 0 346.526 -399.686 A 4 4 0 1 0 354.526 -399.686 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 393.0526315789474 -389.0492012381975 L 393.0526315789474 -405.0492012381975 L 409.0526315789474 -405.0492012381975 L 409.0526315789474 -389.0492012381975 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 401.0526315789474 -397.0492012381975 M 405.0526315789474 -397.0492012381975 L 405.053 -397.049 M 405.053 -397.049 A 4 4 0 1 0 397.053 -397.049 A 4 4 0 1 0 405.053 -397.049 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 443.57894736842104 -389.70317482539235 L 443.57894736842104 -405.70317482539235 L 459.57894736842104 -405.70317482539235 L 459.57894736842104 -389.70317482539235 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 451.57894736842104 -397.70317482539235 M 455.57894736842104 -397.70317482539235 L 455.579 -397.703 M 455.579 -397.703 A 4 4 0 1 0 447.579 -397.703 A 4 4 0 1 0 455.579 -397.703 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 494.10526315789474 -395.24860391681057 L 494.10526315789474 -411.24860391681057 L 510.10526315789474 -411.24860391681057 L 510.10526315789474 -395.24860391681057 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 502.10526315789474 -403.24860391681057 M 506.10526315789474 -403.24860391681057 L 506.105 -403.249 M 506.105 -403.249 A 4 4 0 1 0 498.105 -403.249 A 4 4 0 1 0 506.105 -403.249 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 544.6315789473684 -391.26658577939554 L 544.6315789473684 -407.26658577939554 L 560.6315789473684 -407.26658577939554 L 560.6315789473684 -391.26658577939554 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 552.6315789473684 -399.26658577939554 M 556.6315789473684 -399.26658577939554 L 556.632 -399.267 M 556.632 -399.267 A 4 4 0 1 0 548.632 -399.267 A 4 4 0 1 0 556.632 -399.267 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 595.1578947368421 -389.592468150637 L 595.1578947368421 -405.592468150637 L 611.1578947368421 -405.592468150637 L 611.1578947368421 -389.592468150637 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.1578947368421 -397.592468150637 M 607.1578947368421 -397.592468150637 L 607.158 -397.592 M 607.158 -397.592 A 4 4 0 1 0 599.158 -397.592 A 4 4 0 1 0 607.158 -397.592 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 645.6842105263158 -387.69779271081245 L 645.6842105263158 -403.69779271081245 L 661.6842105263158 -403.69779271081245 L 661.6842105263158 -387.69779271081245 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 653.6842105263158 -395.69779271081245 M 657.6842105263158 -395.69779271081245 L 657.684 -395.698 M 657.684 -395.698 A 4 4 0 1 0 649.684 -395.698 A 4 4 0 1 0 657.684 -395.698 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 696.2105263157895 -389.56611756653757 L 696.2105263157895 -405.56611756653757 L 712.2105263157895 -405.56611756653757 L 712.2105263157895 -389.56611756653757 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 704.2105263157895 -397.56611756653757 M 708.2105263157895 -397.56611756653757 L 708.211 -397.566 M 708.211 -397.566 A 4 4 0 1 0 700.211 -397.566 A 4 4 0 1 0 708.211 -397.566 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 746.7368421052631 -390.44236004168806 L 746.7368421052631 -406.44236004168806 L 762.7368421052631 -406.44236004168806 L 762.7368421052631 -390.44236004168806 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 754.7368421052631 -398.44236004168806 M 758.7368421052631 -398.44236004168806 L 758.737 -398.442 M 758.737 -398.442 A 4 4 0 1 0 750.737 -398.442 A 4 4 0 1 0 758.737 -398.442 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -182.66666666666669 L 314 -182.66666666666669" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -182.66666666666669 L 314.14285714285717 -182.66666666666669" style="stroke-width:1;"/>
+ <path d="M 307.0 -175.52380952380952 L 307.0 -189.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-178.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -164.66666666666666 L 314 -164.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 299.0 -156.66666666666666 L 299.0 -172.66666666666666 L 315.0 -172.66666666666666 L 315.0 -156.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -164.66666666666666 M 311.0 -164.66666666666666 L 311 -164.667 M 311 -164.667 A 4 4 0 1 0 303 -164.667 A 4 4 0 1 0 311 -164.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-160.0">
+ thin_heap
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -526.35 535.725 478.35" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 334.4 -314.0224 L 334.4 -322.0224 L 342.4 -322.0224 L 342.4 -314.0224 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 372.8 -332.0448 L 372.8 -340.0448 L 380.8 -340.0448 L 380.8 -332.0448 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 411.2 -368.0896 L 411.2 -376.0896 L 419.2 -376.0896 L 419.2 -368.0896 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 449.6 -368.0896 L 449.6 -376.0896 L 457.6 -376.0896 L 457.6 -368.0896 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 488.0 -368.0896 L 488.0 -376.0896 L 496.0 -376.0896 L 496.0 -368.0896 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 526.4 -440.17920000000004 L 526.4 -448.17920000000004 L 534.4 -448.17920000000004 L 534.4 -440.17920000000004 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 564.8 -440.17920000000004 L 564.8 -448.17920000000004 L 572.8 -448.17920000000004 L 572.8 -440.17920000000004 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 603.2 -440.17920000000004 L 603.2 -448.17920000000004 L 611.2 -448.17920000000004 L 611.2 -440.17920000000004 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 641.6 -440.17920000000004 L 641.6 -448.17920000000004 L 649.6 -448.17920000000004 L 649.6 -440.17920000000004 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 680.0 -440.17920000000004 L 680.0 -448.17920000000004 L 688.0 -448.17920000000004 L 688.0 -440.17920000000004 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -305.0688 M 342.4 -305.0688 L 342.4 -305.069 M 342.4 -305.069 A 4 4 0 1 0 334.4 -305.069 A 4 4 0 1 0 342.4 -305.069 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -305.7728 M 380.8 -305.7728 L 380.8 -305.773 M 380.8 -305.773 A 4 4 0 1 0 372.8 -305.773 A 4 4 0 1 0 380.8 -305.773 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -305.7728 M 419.2 -305.7728 L 419.2 -305.773 M 419.2 -305.773 A 4 4 0 1 0 411.2 -305.773 A 4 4 0 1 0 419.2 -305.773 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -307.1808 M 457.6 -307.1808 L 457.6 -307.181 M 457.6 -307.181 A 4 4 0 1 0 449.6 -307.181 A 4 4 0 1 0 457.6 -307.181 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -307.1808 M 496.0 -307.1808 L 496 -307.181 M 496 -307.181 A 4 4 0 1 0 488 -307.181 A 4 4 0 1 0 496 -307.181 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -307.1808 M 534.4 -307.1808 L 534.4 -307.181 M 534.4 -307.181 A 4 4 0 1 0 526.4 -307.181 A 4 4 0 1 0 534.4 -307.181 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -307.1808 M 572.8 -307.1808 L 572.8 -307.181 M 572.8 -307.181 A 4 4 0 1 0 564.8 -307.181 A 4 4 0 1 0 572.8 -307.181 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -307.1808 M 611.2 -307.1808 L 611.2 -307.181 M 611.2 -307.181 A 4 4 0 1 0 603.2 -307.181 A 4 4 0 1 0 611.2 -307.181 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -309.9968 M 649.6 -309.9968 L 649.6 -309.997 M 649.6 -309.997 A 4 4 0 1 0 641.6 -309.997 A 4 4 0 1 0 649.6 -309.997 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -309.9968 M 688.0 -309.9968 L 688 -309.997 M 688 -309.997 A 4 4 0 1 0 680 -309.997 A 4 4 0 1 0 688 -309.997 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -296.1968 L 332.15 -306.1968 L 344.65 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -296.1968 L 370.55 -306.1968 L 383.05 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -296.1968 L 408.95 -306.1968 L 421.45 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -296.1968 L 447.35 -306.1968 L 459.85 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -296.1968 L 485.75 -306.1968 L 498.25 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -296.1968 L 524.15 -306.1968 L 536.65 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -296.1968 L 562.55 -306.1968 L 575.05 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -296.1968 L 600.95 -306.1968 L 613.45 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -296.1968 L 639.35 -306.1968 L 651.85 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -296.1968 L 677.75 -306.1968 L 690.25 -306.1968 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 338.4 -300.352 M 342.4 -300.352 L 342.4 -300.352 M 342.4 -300.352 A 4 4 0 1 0 334.4 -300.352 A 4 4 0 1 0 342.4 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 376.8 -300.352 M 380.8 -300.352 L 380.8 -300.352 M 380.8 -300.352 A 4 4 0 1 0 372.8 -300.352 A 4 4 0 1 0 380.8 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 415.2 -300.352 M 419.2 -300.352 L 419.2 -300.352 M 419.2 -300.352 A 4 4 0 1 0 411.2 -300.352 A 4 4 0 1 0 419.2 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 453.6 -300.352 M 457.6 -300.352 L 457.6 -300.352 M 457.6 -300.352 A 4 4 0 1 0 449.6 -300.352 A 4 4 0 1 0 457.6 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 492.0 -300.352 M 496.0 -300.352 L 496 -300.352 M 496 -300.352 A 4 4 0 1 0 488 -300.352 A 4 4 0 1 0 496 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 530.4 -300.352 M 534.4 -300.352 L 534.4 -300.352 M 534.4 -300.352 A 4 4 0 1 0 526.4 -300.352 A 4 4 0 1 0 534.4 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 568.8 -300.352 M 572.8 -300.352 L 572.8 -300.352 M 572.8 -300.352 A 4 4 0 1 0 564.8 -300.352 A 4 4 0 1 0 572.8 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 607.2 -300.352 M 611.2 -300.352 L 611.2 -300.352 M 611.2 -300.352 A 4 4 0 1 0 603.2 -300.352 A 4 4 0 1 0 611.2 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 645.6 -300.352 M 649.6 -300.352 L 649.6 -300.352 M 649.6 -300.352 A 4 4 0 1 0 641.6 -300.352 A 4 4 0 1 0 649.6 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 684.0 -300.352 M 688.0 -300.352 L 688 -300.352 M 688 -300.352 A 4 4 0 1 0 680 -300.352 A 4 4 0 1 0 688 -300.352 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 332.15 -295.352 L 344.65 -295.352 L 338.4 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 370.55 -295.352 L 383.05 -295.352 L 376.8 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 408.95 -295.352 L 421.45 -295.352 L 415.2 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 447.35 -295.352 L 459.85 -295.352 L 453.6 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 485.75 -295.352 L 498.25 -295.352 L 492.0 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 524.15 -295.352 L 536.65 -295.352 L 530.4 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 562.55 -295.352 L 575.05 -295.352 L 568.8 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 600.95 -295.352 L 613.45 -295.352 L 607.2 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 639.35 -295.352 L 651.85 -295.352 L 645.6 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 677.75 -295.352 L 690.25 -295.352 L 684.0 -305.352 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 331.25714285714287 -300.352 L 338.4 -307.49485714285714 L 345.54285714285714 -300.352 L 338.4 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 369.65714285714284 -300.352 L 376.8 -307.49485714285714 L 383.9428571428571 -300.352 L 376.8 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 408.0571428571429 -300.352 L 415.2 -307.49485714285714 L 422.34285714285716 -300.352 L 415.2 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 446.45714285714286 -300.352 L 453.6 -307.49485714285714 L 460.74285714285713 -300.352 L 453.6 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 484.8571428571429 -300.352 L 492.0 -307.49485714285714 L 499.1428571428571 -300.352 L 492.0 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 523.2571428571429 -300.352 L 530.4 -307.49485714285714 L 537.5428571428572 -300.352 L 530.4 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 561.6571428571428 -300.352 L 568.8 -307.49485714285714 L 575.9428571428572 -300.352 L 568.8 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 600.0571428571428 -300.352 L 607.2 -307.49485714285714 L 614.3428571428572 -300.352 L 607.2 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 638.4571428571428 -300.352 L 645.6 -307.49485714285714 L 652.7428571428572 -300.352 L 645.6 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 676.8571428571429 -300.352 L 684.0 -307.49485714285714 L 691.1428571428571 -300.352 L 684.0 -293.20914285714287 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 303.0 -168.66666666666669 L 303.0 -176.66666666666669 L 311.0 -176.66666666666669 L 311.0 -168.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 307.0 -154.66666666666666 M 311.0 -154.66666666666666 L 311 -154.667 M 311 -154.667 A 4 4 0 1 0 303 -154.667 A 4 4 0 1 0 311 -154.667 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 300.75 -95.66666666666666 L 313.25 -95.66666666666666 L 307.0 -105.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 299.85714285714283 -82.66666666666666 L 307.0 -89.8095238095238 L 314.14285714285717 -82.66666666666666 L 307.0 -75.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -388.0 L 780 -388.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -476.0 L 780 -476.0" style="stroke:rgb(179,179,179);stroke-width:0.4;stroke-dasharray:1,1;"/>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -328.83584 L 288 -328.83584"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-324.336)" x="288.0" y="-324.3363267321942">
+ 3.28e+03
+ </text>
+ <path d="M 300 -357.67168 L 288 -357.67168"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-353.172)" x="288.0" y="-353.1721667321942">
+ 6.55e+03
+ </text>
+ <path d="M 300 -386.50752 L 288 -386.50752"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-382.008)" x="288.0" y="-382.00800673219425">
+ 9.83e+03
+ </text>
+ <path d="M 300 -415.34336 L 288 -415.34336"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-410.844)" x="288.0" y="-410.8438467321942">
+ 1.31e+04
+ </text>
+ <path d="M 300 -444.17920000000004 L 288 -444.17920000000004"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-439.68)" x="288.0" y="-439.6796867321942">
+ 1.64e+04
+ </text>
+ <path d="M 300 -473.01504 L 288 -473.01504"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-468.516)" x="288.0" y="-468.5155267321942">
+ 1.97e+04
+ </text>
+ <path d="M 300 -501.85087999999996 L 288 -501.85087999999996"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-497.351)" x="288.0" y="-497.3513667321942">
+ 2.29e+04
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Memory (bytes)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -318.0224 L 376.8 -336.0448 L 415.2 -372.0896 L 453.6 -372.0896 L 492.0 -372.0896 L 530.4 -444.17920000000004 L 568.8 -444.17920000000004 L 607.2 -444.17920000000004 L 645.6 -444.17920000000004 L 684.0 -444.17920000000004" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 334.4 -314.0224 L 334.4 -322.0224 L 342.4 -322.0224 L 342.4 -314.0224 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -314.0224 L 334.4 -322.0224 L 342.4 -322.0224 L 342.4 -314.0224 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 372.8 -332.0448 L 372.8 -340.0448 L 380.8 -340.0448 L 380.8 -332.0448 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -332.0448 L 372.8 -340.0448 L 380.8 -340.0448 L 380.8 -332.0448 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 411.2 -368.0896 L 411.2 -376.0896 L 419.2 -376.0896 L 419.2 -368.0896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -368.0896 L 411.2 -376.0896 L 419.2 -376.0896 L 419.2 -368.0896 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 449.6 -368.0896 L 449.6 -376.0896 L 457.6 -376.0896 L 457.6 -368.0896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -368.0896 L 449.6 -376.0896 L 457.6 -376.0896 L 457.6 -368.0896 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 488.0 -368.0896 L 488.0 -376.0896 L 496.0 -376.0896 L 496.0 -368.0896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -368.0896 L 488.0 -376.0896 L 496.0 -376.0896 L 496.0 -368.0896 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 526.4 -440.17920000000004 L 526.4 -448.17920000000004 L 534.4 -448.17920000000004 L 534.4 -440.17920000000004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -440.17920000000004 L 526.4 -448.17920000000004 L 534.4 -448.17920000000004 L 534.4 -440.17920000000004 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 564.8 -440.17920000000004 L 564.8 -448.17920000000004 L 572.8 -448.17920000000004 L 572.8 -440.17920000000004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -440.17920000000004 L 564.8 -448.17920000000004 L 572.8 -448.17920000000004 L 572.8 -440.17920000000004 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 603.2 -440.17920000000004 L 603.2 -448.17920000000004 L 611.2 -448.17920000000004 L 611.2 -440.17920000000004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -440.17920000000004 L 603.2 -448.17920000000004 L 611.2 -448.17920000000004 L 611.2 -440.17920000000004 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 641.6 -440.17920000000004 L 641.6 -448.17920000000004 L 649.6 -448.17920000000004 L 649.6 -440.17920000000004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -440.17920000000004 L 641.6 -448.17920000000004 L 649.6 -448.17920000000004 L 649.6 -440.17920000000004 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 680.0 -440.17920000000004 L 680.0 -448.17920000000004 L 688.0 -448.17920000000004 L 688.0 -440.17920000000004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -440.17920000000004 L 680.0 -448.17920000000004 L 688.0 -448.17920000000004 L 688.0 -440.17920000000004 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -305.0688 L 376.8 -305.7728 L 415.2 -305.7728 L 453.6 -307.1808 L 492.0 -307.1808 L 530.4 -307.1808 L 568.8 -307.1808 L 607.2 -307.1808 L 645.6 -309.9968 L 684.0 -309.9968" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -297.0688 L 330.4 -313.0688 L 346.4 -313.0688 L 346.4 -297.0688 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -305.0688 M 342.4 -305.0688 L 342.4 -305.069 M 342.4 -305.069 A 4 4 0 1 0 334.4 -305.069 A 4 4 0 1 0 342.4 -305.069 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -297.7728 L 368.8 -313.7728 L 384.8 -313.7728 L 384.8 -297.7728 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -305.7728 M 380.8 -305.7728 L 380.8 -305.773 M 380.8 -305.773 A 4 4 0 1 0 372.8 -305.773 A 4 4 0 1 0 380.8 -305.773 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -297.7728 L 407.2 -313.7728 L 423.2 -313.7728 L 423.2 -297.7728 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -305.7728 M 419.2 -305.7728 L 419.2 -305.773 M 419.2 -305.773 A 4 4 0 1 0 411.2 -305.773 A 4 4 0 1 0 419.2 -305.773 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -299.1808 L 445.6 -315.1808 L 461.6 -315.1808 L 461.6 -299.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -307.1808 M 457.6 -307.1808 L 457.6 -307.181 M 457.6 -307.181 A 4 4 0 1 0 449.6 -307.181 A 4 4 0 1 0 457.6 -307.181 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -299.1808 L 484.0 -315.1808 L 500.0 -315.1808 L 500.0 -299.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -307.1808 M 496.0 -307.1808 L 496 -307.181 M 496 -307.181 A 4 4 0 1 0 488 -307.181 A 4 4 0 1 0 496 -307.181 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -299.1808 L 522.4 -315.1808 L 538.4 -315.1808 L 538.4 -299.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -307.1808 M 534.4 -307.1808 L 534.4 -307.181 M 534.4 -307.181 A 4 4 0 1 0 526.4 -307.181 A 4 4 0 1 0 534.4 -307.181 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -299.1808 L 560.8 -315.1808 L 576.8 -315.1808 L 576.8 -299.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -307.1808 M 572.8 -307.1808 L 572.8 -307.181 M 572.8 -307.181 A 4 4 0 1 0 564.8 -307.181 A 4 4 0 1 0 572.8 -307.181 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -299.1808 L 599.2 -315.1808 L 615.2 -315.1808 L 615.2 -299.1808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -307.1808 M 611.2 -307.1808 L 611.2 -307.181 M 611.2 -307.181 A 4 4 0 1 0 603.2 -307.181 A 4 4 0 1 0 611.2 -307.181 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -301.9968 L 637.6 -317.9968 L 653.6 -317.9968 L 653.6 -301.9968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -309.9968 M 649.6 -309.9968 L 649.6 -309.997 M 649.6 -309.997 A 4 4 0 1 0 641.6 -309.997 A 4 4 0 1 0 649.6 -309.997 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -301.9968 L 676.0 -317.9968 L 692.0 -317.9968 L 692.0 -301.9968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -309.9968 M 688.0 -309.9968 L 688 -309.997 M 688 -309.997 A 4 4 0 1 0 680 -309.997 A 4 4 0 1 0 688 -309.997 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -301.1968 L 376.8 -301.1968 L 415.2 -301.1968 L 453.6 -301.1968 L 492.0 -301.1968 L 530.4 -301.1968 L 568.8 -301.1968 L 607.2 -301.1968 L 645.6 -301.1968 L 684.0 -301.1968" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -296.1968 L 332.15 -306.1968 L 344.65 -306.1968 L 344.65 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -296.1968 L 332.15 -306.1968 L 344.65 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -296.1968 L 370.55 -306.1968 L 383.05 -306.1968 L 383.05 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -296.1968 L 370.55 -306.1968 L 383.05 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -296.1968 L 408.95 -306.1968 L 421.45 -306.1968 L 421.45 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -296.1968 L 408.95 -306.1968 L 421.45 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -296.1968 L 447.35 -306.1968 L 459.85 -306.1968 L 459.85 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -296.1968 L 447.35 -306.1968 L 459.85 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -296.1968 L 485.75 -306.1968 L 498.25 -306.1968 L 498.25 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -296.1968 L 485.75 -306.1968 L 498.25 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -296.1968 L 524.15 -306.1968 L 536.65 -306.1968 L 536.65 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -296.1968 L 524.15 -306.1968 L 536.65 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -296.1968 L 562.55 -306.1968 L 575.05 -306.1968 L 575.05 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -296.1968 L 562.55 -306.1968 L 575.05 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -296.1968 L 600.95 -306.1968 L 613.45 -306.1968 L 613.45 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -296.1968 L 600.95 -306.1968 L 613.45 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -296.1968 L 639.35 -306.1968 L 651.85 -306.1968 L 651.85 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -296.1968 L 639.35 -306.1968 L 651.85 -306.1968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -296.1968 L 677.75 -306.1968 L 690.25 -306.1968 L 690.25 -296.1968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -296.1968 L 677.75 -306.1968 L 690.25 -306.1968 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -300.352 L 376.8 -300.352 L 415.2 -300.352 L 453.6 -300.352 L 492.0 -300.352 L 530.4 -300.352 L 568.8 -300.352 L 607.2 -300.352 L 645.6 -300.352 L 684.0 -300.352" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 330.4 -292.352 L 330.4 -308.352 L 346.4 -308.352 L 346.4 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -300.352 M 342.4 -300.352 L 342.4 -300.352 M 342.4 -300.352 A 4 4 0 1 0 334.4 -300.352 A 4 4 0 1 0 342.4 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 368.8 -292.352 L 368.8 -308.352 L 384.8 -308.352 L 384.8 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -300.352 M 380.8 -300.352 L 380.8 -300.352 M 380.8 -300.352 A 4 4 0 1 0 372.8 -300.352 A 4 4 0 1 0 380.8 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 407.2 -292.352 L 407.2 -308.352 L 423.2 -308.352 L 423.2 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -300.352 M 419.2 -300.352 L 419.2 -300.352 M 419.2 -300.352 A 4 4 0 1 0 411.2 -300.352 A 4 4 0 1 0 419.2 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 445.6 -292.352 L 445.6 -308.352 L 461.6 -308.352 L 461.6 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -300.352 M 457.6 -300.352 L 457.6 -300.352 M 457.6 -300.352 A 4 4 0 1 0 449.6 -300.352 A 4 4 0 1 0 457.6 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 484.0 -292.352 L 484.0 -308.352 L 500.0 -308.352 L 500.0 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -300.352 M 496.0 -300.352 L 496 -300.352 M 496 -300.352 A 4 4 0 1 0 488 -300.352 A 4 4 0 1 0 496 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 522.4 -292.352 L 522.4 -308.352 L 538.4 -308.352 L 538.4 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -300.352 M 534.4 -300.352 L 534.4 -300.352 M 534.4 -300.352 A 4 4 0 1 0 526.4 -300.352 A 4 4 0 1 0 534.4 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 560.8 -292.352 L 560.8 -308.352 L 576.8 -308.352 L 576.8 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -300.352 M 572.8 -300.352 L 572.8 -300.352 M 572.8 -300.352 A 4 4 0 1 0 564.8 -300.352 A 4 4 0 1 0 572.8 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 599.2 -292.352 L 599.2 -308.352 L 615.2 -308.352 L 615.2 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -300.352 M 611.2 -300.352 L 611.2 -300.352 M 611.2 -300.352 A 4 4 0 1 0 603.2 -300.352 A 4 4 0 1 0 611.2 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 637.6 -292.352 L 637.6 -308.352 L 653.6 -308.352 L 653.6 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -300.352 M 649.6 -300.352 L 649.6 -300.352 M 649.6 -300.352 A 4 4 0 1 0 641.6 -300.352 A 4 4 0 1 0 649.6 -300.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 676.0 -292.352 L 676.0 -308.352 L 692.0 -308.352 L 692.0 -292.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -300.352 M 688.0 -300.352 L 688 -300.352 M 688 -300.352 A 4 4 0 1 0 680 -300.352 A 4 4 0 1 0 688 -300.352 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -300.352 L 376.8 -300.352 L 415.2 -300.352 L 453.6 -300.352 L 492.0 -300.352 L 530.4 -300.352 L 568.8 -300.352 L 607.2 -300.352 L 645.6 -300.352 L 684.0 -300.352" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 332.15 -295.352 L 332.15 -305.352 L 344.65 -305.352 L 344.65 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -295.352 L 344.65 -295.352 L 338.4 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 370.55 -295.352 L 370.55 -305.352 L 383.05 -305.352 L 383.05 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -295.352 L 383.05 -295.352 L 376.8 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 408.95 -295.352 L 408.95 -305.352 L 421.45 -305.352 L 421.45 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -295.352 L 421.45 -295.352 L 415.2 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 447.35 -295.352 L 447.35 -305.352 L 459.85 -305.352 L 459.85 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -295.352 L 459.85 -295.352 L 453.6 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 485.75 -295.352 L 485.75 -305.352 L 498.25 -305.352 L 498.25 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -295.352 L 498.25 -295.352 L 492.0 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 524.15 -295.352 L 524.15 -305.352 L 536.65 -305.352 L 536.65 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -295.352 L 536.65 -295.352 L 530.4 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 562.55 -295.352 L 562.55 -305.352 L 575.05 -305.352 L 575.05 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -295.352 L 575.05 -295.352 L 568.8 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 600.95 -295.352 L 600.95 -305.352 L 613.45 -305.352 L 613.45 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -295.352 L 613.45 -295.352 L 607.2 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 639.35 -295.352 L 639.35 -305.352 L 651.85 -305.352 L 651.85 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -295.352 L 651.85 -295.352 L 645.6 -305.352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 677.75 -295.352 L 677.75 -305.352 L 690.25 -305.352 L 690.25 -295.352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -295.352 L 690.25 -295.352 L 684.0 -305.352 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 338.4 -300.352 L 376.8 -300.352 L 415.2 -300.352 L 453.6 -300.352 L 492.0 -300.352 L 530.4 -300.352 L 568.8 -300.352 L 607.2 -300.352 L 645.6 -300.352 L 684.0 -300.352" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip63);">
+ <path d="M 331.25714285714287 -293.20914285714287 L 331.25714285714287 -307.49485714285714 L 345.54285714285714 -307.49485714285714 L 345.54285714285714 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -300.352 L 338.4 -307.49485714285714 L 345.54285714285714 -300.352 L 338.4 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip64);">
+ <path d="M 369.65714285714284 -293.20914285714287 L 369.65714285714284 -307.49485714285714 L 383.9428571428571 -307.49485714285714 L 383.9428571428571 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -300.352 L 376.8 -307.49485714285714 L 383.9428571428571 -300.352 L 376.8 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 408.0571428571429 -293.20914285714287 L 408.0571428571429 -307.49485714285714 L 422.34285714285716 -307.49485714285714 L 422.34285714285716 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -300.352 L 415.2 -307.49485714285714 L 422.34285714285716 -300.352 L 415.2 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 446.45714285714286 -293.20914285714287 L 446.45714285714286 -307.49485714285714 L 460.74285714285713 -307.49485714285714 L 460.74285714285713 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -300.352 L 453.6 -307.49485714285714 L 460.74285714285713 -300.352 L 453.6 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 484.8571428571429 -293.20914285714287 L 484.8571428571429 -307.49485714285714 L 499.1428571428571 -307.49485714285714 L 499.1428571428571 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -300.352 L 492.0 -307.49485714285714 L 499.1428571428571 -300.352 L 492.0 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 523.2571428571429 -293.20914285714287 L 523.2571428571429 -307.49485714285714 L 537.5428571428572 -307.49485714285714 L 537.5428571428572 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -300.352 L 530.4 -307.49485714285714 L 537.5428571428572 -300.352 L 530.4 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 561.6571428571428 -293.20914285714287 L 561.6571428571428 -307.49485714285714 L 575.9428571428572 -307.49485714285714 L 575.9428571428572 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -300.352 L 568.8 -307.49485714285714 L 575.9428571428572 -300.352 L 568.8 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 600.0571428571428 -293.20914285714287 L 600.0571428571428 -307.49485714285714 L 614.3428571428572 -307.49485714285714 L 614.3428571428572 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -300.352 L 607.2 -307.49485714285714 L 614.3428571428572 -300.352 L 607.2 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 638.4571428571428 -293.20914285714287 L 638.4571428571428 -307.49485714285714 L 652.7428571428572 -307.49485714285714 L 652.7428571428572 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -300.352 L 645.6 -307.49485714285714 L 652.7428571428572 -300.352 L 645.6 -293.20914285714287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 676.8571428571429 -293.20914285714287 L 676.8571428571429 -307.49485714285714 L 691.1428571428571 -307.49485714285714 L 691.1428571428571 -293.20914285714287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -300.352 L 684.0 -307.49485714285714 L 691.1428571428571 -300.352 L 684.0 -293.20914285714287 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip73);">
+ <path d="M 338.4 -300.2816 L 376.8 -300.2816 L 415.2 -300.2816 L 453.6 -300.2816 L 492.0 -300.2816 L 530.4 -300.2816 L 568.8 -300.2816 L 607.2 -300.2816 L 645.6 -300.2816 L 684.0 -300.2816" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip74);">
+ <path d="M 331.25714285714287 -300.2816 L 345.54285714285714 -300.2816" style="stroke-width:1;"/>
+ <path d="M 338.4 -293.13874285714286 L 338.4 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -300.2816 L 383.9428571428571 -300.2816" style="stroke-width:1;"/>
+ <path d="M 376.8 -293.13874285714286 L 376.8 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -300.2816 L 422.34285714285716 -300.2816" style="stroke-width:1;"/>
+ <path d="M 415.2 -293.13874285714286 L 415.2 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -300.2816 L 460.74285714285713 -300.2816" style="stroke-width:1;"/>
+ <path d="M 453.6 -293.13874285714286 L 453.6 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -300.2816 L 499.1428571428571 -300.2816" style="stroke-width:1;"/>
+ <path d="M 492.0 -293.13874285714286 L 492.0 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -300.2816 L 537.5428571428572 -300.2816" style="stroke-width:1;"/>
+ <path d="M 530.4 -293.13874285714286 L 530.4 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -300.2816 L 575.9428571428572 -300.2816" style="stroke-width:1;"/>
+ <path d="M 568.8 -293.13874285714286 L 568.8 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -300.2816 L 614.3428571428572 -300.2816" style="stroke-width:1;"/>
+ <path d="M 607.2 -293.13874285714286 L 607.2 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -300.2816 L 652.7428571428572 -300.2816" style="stroke-width:1;"/>
+ <path d="M 645.6 -293.13874285714286 L 645.6 -307.42445714285714" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -300.2816 L 691.1428571428571 -300.2816" style="stroke-width:1;"/>
+ <path d="M 684.0 -293.13874285714286 L 684.0 -307.42445714285714" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 303.0 -168.66666666666669 L 303.0 -176.66666666666669 L 311.0 -176.66666666666669 L 311.0 -168.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -168.66666666666669 L 303.0 -176.66666666666669 L 311.0 -176.66666666666669 L 311.0 -168.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 299.0 -146.66666666666666 L 299.0 -162.66666666666666 L 315.0 -162.66666666666666 L 315.0 -146.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -154.66666666666666 M 311.0 -154.66666666666666 L 311 -154.667 M 311 -154.667 A 4 4 0 1 0 303 -154.667 A 4 4 0 1 0 311 -154.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 300.75 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 L 313.25 -131.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -131.66666666666666 L 300.75 -141.66666666666666 L 313.25 -141.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ binary_heap
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 299.0 -110.66666666666666 L 299.0 -126.66666666666666 L 315.0 -126.66666666666666 L 315.0 -110.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -118.66666666666666 M 311.0 -118.66666666666666 L 311 -118.667 M 311 -118.667 A 4 4 0 1 0 303 -118.667 A 4 4 0 1 0 311 -118.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ thin_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 300.75 -95.66666666666666 L 300.75 -105.66666666666666 L 313.25 -105.66666666666666 L 313.25 -95.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -95.66666666666666 L 313.25 -95.66666666666666 L 307.0 -105.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 299.85714285714283 -75.52380952380952 L 299.85714285714283 -89.8095238095238 L 314.14285714285717 -89.8095238095238 L 314.14285714285717 -75.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -82.66666666666666 L 307.0 -89.8095238095238 L 314.14285714285717 -82.66666666666666 L 307.0 -75.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -64.66666666666666 L 314.14285714285717 -64.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -57.52380952380952 L 307.0 -71.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 496.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -319.02358828362946 L 332.15 -329.02358828362946 L 344.65 -329.02358828362946 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -338.8708644403897 L 370.55 -348.8708644403897 L 383.05 -348.8708644403897 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -361.666619745818 L 408.95 -371.666619745818 L 421.45 -371.666619745818 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -380.4837920726053 L 447.35 -390.4837920726053 L 459.85 -390.4837920726053 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -398.22599602697716 L 485.75 -408.22599602697716 L 498.25 -408.22599602697716 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -419.73116993030493 L 524.15 -429.73116993030493 L 536.65 -429.73116993030493 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -446.15208865225145 L 562.55 -456.15208865225145 L 575.05 -456.15208865225145 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -465.9679712422119 L 600.95 -475.9679712422119 L 613.45 -475.9679712422119 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -487.8315969686786 L 639.35 -497.8315969686786 L 651.85 -497.8315969686786 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 331.25714285714287 -301.34638143482783 L 338.4 -308.48923857768494 L 345.54285714285714 -301.34638143482783 L 338.4 -294.20352429197067 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 369.65714285714284 -301.53403057714405 L 376.8 -308.67688772000116 L 383.9428571428571 -301.53403057714405 L 376.8 -294.3911734342869 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.0571428571429 -301.65685258466425 L 415.2 -308.7997097275214 L 422.34285714285716 -301.65685258466425 L 415.2 -294.51399544180714 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 446.45714285714286 -301.709954551293 L 453.6 -308.85281169415015 L 460.74285714285713 -301.709954551293 L 453.6 -294.56709740843587 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 484.8571428571429 -301.8004500882405 L 492.0 -308.94330723109766 L 499.1428571428571 -301.8004500882405 L 492.0 -294.6575929453834 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 523.2571428571429 -301.8685017410567 L 530.4 -309.0113588839139 L 537.5428571428572 -301.8685017410567 L 530.4 -294.7256445981996 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 561.6571428571428 -301.8433172101567 L 568.8 -308.9861743530139 L 575.9428571428572 -301.8433172101567 L 568.8 -294.70046006729956 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.0571428571428 -301.85208108626455 L 607.2 -308.9949382291217 L 614.3428571428572 -301.85208108626455 L 607.2 -294.70922394340744 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 638.4571428571428 -301.8905817540069 L 645.6 -309.033438896864 L 652.7428571428572 -301.8905817540069 L 645.6 -294.74772461114975 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 676.8571428571429 -301.9354850061496 L 684.0 -309.0783421490067 L 691.1428571428571 -301.9354850061496 L 684.0 -294.7926278632924 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -301.2731620370452 M 342.4 -301.2731620370452 L 342.4 -301.273 M 342.4 -301.273 A 4 4 0 1 0 334.4 -301.273 A 4 4 0 1 0 342.4 -301.273 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -301.4949221671098 M 380.8 -301.4949221671098 L 380.8 -301.495 M 380.8 -301.495 A 4 4 0 1 0 372.8 -301.495 A 4 4 0 1 0 380.8 -301.495 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -301.63795450906423 M 419.2 -301.63795450906423 L 419.2 -301.638 M 419.2 -301.638 A 4 4 0 1 0 411.2 -301.638 A 4 4 0 1 0 419.2 -301.638 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -301.66493517004994 M 457.6 -301.66493517004994 L 457.6 -301.665 M 457.6 -301.665 A 4 4 0 1 0 449.6 -301.665 A 4 4 0 1 0 457.6 -301.665 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -301.7576294179645 M 496.0 -301.7576294179645 L 496 -301.758 M 496 -301.758 A 4 4 0 1 0 488 -301.758 A 4 4 0 1 0 496 -301.758 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -301.8388655946426 M 534.4 -301.8388655946426 L 534.4 -301.839 M 534.4 -301.839 A 4 4 0 1 0 526.4 -301.839 A 4 4 0 1 0 534.4 -301.839 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -301.83923333679377 M 572.8 -301.83923333679377 L 572.8 -301.839 M 572.8 -301.839 A 4 4 0 1 0 564.8 -301.839 A 4 4 0 1 0 572.8 -301.839 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -301.8618359306956 M 611.2 -301.8618359306956 L 611.2 -301.862 M 611.2 -301.862 A 4 4 0 1 0 603.2 -301.862 A 4 4 0 1 0 611.2 -301.862 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -301.9368204908038 M 649.6 -301.9368204908038 L 649.6 -301.937 M 649.6 -301.937 A 4 4 0 1 0 641.6 -301.937 A 4 4 0 1 0 649.6 -301.937 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -302.0126024707346 M 688.0 -302.0126024707346 L 688 -302.013 M 688 -302.013 A 4 4 0 1 0 680 -302.013 A 4 4 0 1 0 688 -302.013 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 332.15 -296.21855426308167 L 344.65 -296.21855426308167 L 338.4 -306.21855426308167 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 370.55 -296.3938666239687 L 383.05 -296.3938666239687 L 376.8 -306.3938666239687 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 408.95 -296.5214034729639 L 421.45 -296.5214034729639 L 415.2 -306.5214034729639 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 447.35 -296.5967751300734 L 459.85 -296.5967751300734 L 453.6 -306.5967751300734 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 485.75 -296.64746548238446 L 498.25 -296.64746548238446 L 492.0 -306.64746548238446 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 524.15 -296.6999480938112 L 536.65 -296.6999480938112 L 530.4 -306.6999480938112 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 562.55 -296.70047067476287 L 575.05 -296.70047067476287 L 568.8 -306.70047067476287 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 600.95 -296.737020373619 L 613.45 -296.737020373619 L 607.2 -306.737020373619 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 639.35 -296.7630836147118 L 651.85 -296.7630836147118 L 645.6 -306.7630836147118 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 677.75 -296.8078707377541 L 690.25 -296.8078707377541 L 684.0 -306.8078707377541 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 338.4 -301.145958091471 M 342.4 -301.145958091471 L 342.4 -301.146 M 342.4 -301.146 A 4 4 0 1 0 334.4 -301.146 A 4 4 0 1 0 342.4 -301.146 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 376.8 -301.301416247165 M 380.8 -301.301416247165 L 380.8 -301.301 M 380.8 -301.301 A 4 4 0 1 0 372.8 -301.301 A 4 4 0 1 0 380.8 -301.301 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 415.2 -301.37377628960485 M 419.2 -301.37377628960485 L 419.2 -301.374 M 419.2 -301.374 A 4 4 0 1 0 411.2 -301.374 A 4 4 0 1 0 419.2 -301.374 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 453.6 -301.4568163383087 M 457.6 -301.4568163383087 L 457.6 -301.457 M 457.6 -301.457 A 4 4 0 1 0 449.6 -301.457 A 4 4 0 1 0 457.6 -301.457 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 492.0 -301.46844860319567 M 496.0 -301.46844860319567 L 496 -301.468 M 496 -301.468 A 4 4 0 1 0 488 -301.468 A 4 4 0 1 0 496 -301.468 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 530.4 -301.521113150213 M 534.4 -301.521113150213 L 534.4 -301.521 M 534.4 -301.521 A 4 4 0 1 0 526.4 -301.521 A 4 4 0 1 0 534.4 -301.521 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 568.8 -301.56170027079196 M 572.8 -301.56170027079196 L 572.8 -301.562 M 572.8 -301.562 A 4 4 0 1 0 564.8 -301.562 A 4 4 0 1 0 572.8 -301.562 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 607.2 -301.61290546211467 M 611.2 -301.61290546211467 L 611.2 -301.613 M 611.2 -301.613 A 4 4 0 1 0 603.2 -301.613 A 4 4 0 1 0 611.2 -301.613 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 645.6 -301.609247395453 M 649.6 -301.609247395453 L 649.6 -301.609 M 649.6 -301.609 A 4 4 0 1 0 641.6 -301.609 A 4 4 0 1 0 649.6 -301.609 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 684.0 -301.6830319548574 M 688.0 -301.6830319548574 L 688 -301.683 M 688 -301.683 A 4 4 0 1 0 680 -301.683 A 4 4 0 1 0 688 -301.683 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 334.4 -296.99423155086896 L 334.4 -304.99423155086896 L 342.4 -304.99423155086896 L 342.4 -296.99423155086896 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 372.8 -297.0555283610137 L 372.8 -305.0555283610137 L 380.8 -305.0555283610137 L 380.8 -297.0555283610137 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 411.2 -297.08683289550316 L 411.2 -305.08683289550316 L 419.2 -305.08683289550316 L 419.2 -297.08683289550316 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 449.6 -297.1250471114646 L 449.6 -305.1250471114646 L 457.6 -305.1250471114646 L 457.6 -297.1250471114646 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 488.0 -297.16545229645294 L 488.0 -305.16545229645294 L 496.0 -305.16545229645294 L 496.0 -297.16545229645294 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 526.4 -297.18212843526595 L 526.4 -305.18212843526595 L 534.4 -305.18212843526595 L 534.4 -297.18212843526595 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 564.8 -297.1972948957741 L 564.8 -305.1972948957741 L 572.8 -305.1972948957741 L 572.8 -297.1972948957741 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 603.2 -297.20967812884345 L 603.2 -305.20967812884345 L 611.2 -305.20967812884345 L 611.2 -297.20967812884345 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 641.6 -297.24566653704784 L 641.6 -305.24566653704784 L 649.6 -305.24566653704784 L 649.6 -297.24566653704784 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 680.0 -297.24731169930305 L 680.0 -305.24731169930305 L 688.0 -305.24731169930305 L 688.0 -297.24731169930305 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 299.85714285714283 -154.66666666666666 L 307.0 -161.8095238095238 L 314.14285714285717 -154.66666666666666 L 307.0 -147.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 307.0 -136.66666666666666 M 311.0 -136.66666666666666 L 311 -136.667 M 311 -136.667 A 4 4 0 1 0 303 -136.667 A 4 4 0 1 0 311 -136.667 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 300.75 -113.66666666666666 L 313.25 -113.66666666666666 L 307.0 -123.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 307.0 -100.66666666666666 M 311.0 -100.66666666666666 L 311 -100.667 M 311 -100.667 A 4 4 0 1 0 303 -100.667 A 4 4 0 1 0 311 -100.667 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.14e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.50048673219425">
+ 2.27e-05
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 3.41e-05
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.50048673219425">
+ 4.55e-05
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 5.68e-05
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -324.02358828362946 L 376.8 -343.8708644403897 L 415.2 -366.666619745818 L 453.6 -385.4837920726053 L 492.0 -403.22599602697716 L 530.4 -424.73116993030493 L 568.8 -451.15208865225145 L 607.2 -470.9679712422119 L 645.6 -492.8315969686786 L 684.0 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -319.02358828362946 L 332.15 -329.02358828362946 L 344.65 -329.02358828362946 L 344.65 -319.02358828362946 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -319.02358828362946 L 332.15 -329.02358828362946 L 344.65 -329.02358828362946 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -338.8708644403897 L 370.55 -348.8708644403897 L 383.05 -348.8708644403897 L 383.05 -338.8708644403897 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -338.8708644403897 L 370.55 -348.8708644403897 L 383.05 -348.8708644403897 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -361.666619745818 L 408.95 -371.666619745818 L 421.45 -371.666619745818 L 421.45 -361.666619745818 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -361.666619745818 L 408.95 -371.666619745818 L 421.45 -371.666619745818 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -380.4837920726053 L 447.35 -390.4837920726053 L 459.85 -390.4837920726053 L 459.85 -380.4837920726053 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -380.4837920726053 L 447.35 -390.4837920726053 L 459.85 -390.4837920726053 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -398.22599602697716 L 485.75 -408.22599602697716 L 498.25 -408.22599602697716 L 498.25 -398.22599602697716 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -398.22599602697716 L 485.75 -408.22599602697716 L 498.25 -408.22599602697716 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -419.73116993030493 L 524.15 -429.73116993030493 L 536.65 -429.73116993030493 L 536.65 -419.73116993030493 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -419.73116993030493 L 524.15 -429.73116993030493 L 536.65 -429.73116993030493 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -446.15208865225145 L 562.55 -456.15208865225145 L 575.05 -456.15208865225145 L 575.05 -446.15208865225145 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -446.15208865225145 L 562.55 -456.15208865225145 L 575.05 -456.15208865225145 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -465.9679712422119 L 600.95 -475.9679712422119 L 613.45 -475.9679712422119 L 613.45 -465.9679712422119 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -465.9679712422119 L 600.95 -475.9679712422119 L 613.45 -475.9679712422119 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -487.8315969686786 L 639.35 -497.8315969686786 L 651.85 -497.8315969686786 L 651.85 -487.8315969686786 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -487.8315969686786 L 639.35 -497.8315969686786 L 651.85 -497.8315969686786 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -301.34638143482783 L 376.8 -301.53403057714405 L 415.2 -301.65685258466425 L 453.6 -301.709954551293 L 492.0 -301.8004500882405 L 530.4 -301.8685017410567 L 568.8 -301.8433172101567 L 607.2 -301.85208108626455 L 645.6 -301.8905817540069 L 684.0 -301.9354850061496" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 331.25714285714287 -294.20352429197067 L 331.25714285714287 -308.48923857768494 L 345.54285714285714 -308.48923857768494 L 345.54285714285714 -294.20352429197067 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -301.34638143482783 L 338.4 -308.48923857768494 L 345.54285714285714 -301.34638143482783 L 338.4 -294.20352429197067 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 369.65714285714284 -294.3911734342869 L 369.65714285714284 -308.67688772000116 L 383.9428571428571 -308.67688772000116 L 383.9428571428571 -294.3911734342869 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -301.53403057714405 L 376.8 -308.67688772000116 L 383.9428571428571 -301.53403057714405 L 376.8 -294.3911734342869 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.0571428571429 -294.51399544180714 L 408.0571428571429 -308.7997097275214 L 422.34285714285716 -308.7997097275214 L 422.34285714285716 -294.51399544180714 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -301.65685258466425 L 415.2 -308.7997097275214 L 422.34285714285716 -301.65685258466425 L 415.2 -294.51399544180714 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 446.45714285714286 -294.56709740843587 L 446.45714285714286 -308.85281169415015 L 460.74285714285713 -308.85281169415015 L 460.74285714285713 -294.56709740843587 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -301.709954551293 L 453.6 -308.85281169415015 L 460.74285714285713 -301.709954551293 L 453.6 -294.56709740843587 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.8571428571429 -294.6575929453834 L 484.8571428571429 -308.94330723109766 L 499.1428571428571 -308.94330723109766 L 499.1428571428571 -294.6575929453834 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -301.8004500882405 L 492.0 -308.94330723109766 L 499.1428571428571 -301.8004500882405 L 492.0 -294.6575929453834 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 523.2571428571429 -294.7256445981996 L 523.2571428571429 -309.0113588839139 L 537.5428571428572 -309.0113588839139 L 537.5428571428572 -294.7256445981996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -301.8685017410567 L 530.4 -309.0113588839139 L 537.5428571428572 -301.8685017410567 L 530.4 -294.7256445981996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 561.6571428571428 -294.70046006729956 L 561.6571428571428 -308.9861743530139 L 575.9428571428572 -308.9861743530139 L 575.9428571428572 -294.70046006729956 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -301.8433172101567 L 568.8 -308.9861743530139 L 575.9428571428572 -301.8433172101567 L 568.8 -294.70046006729956 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.0571428571428 -294.70922394340744 L 600.0571428571428 -308.9949382291217 L 614.3428571428572 -308.9949382291217 L 614.3428571428572 -294.70922394340744 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -301.85208108626455 L 607.2 -308.9949382291217 L 614.3428571428572 -301.85208108626455 L 607.2 -294.70922394340744 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 638.4571428571428 -294.74772461114975 L 638.4571428571428 -309.033438896864 L 652.7428571428572 -309.033438896864 L 652.7428571428572 -294.74772461114975 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -301.8905817540069 L 645.6 -309.033438896864 L 652.7428571428572 -301.8905817540069 L 645.6 -294.74772461114975 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.8571428571429 -294.7926278632924 L 676.8571428571429 -309.0783421490067 L 691.1428571428571 -309.0783421490067 L 691.1428571428571 -294.7926278632924 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -301.9354850061496 L 684.0 -309.0783421490067 L 691.1428571428571 -301.9354850061496 L 684.0 -294.7926278632924 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -301.2731620370452 L 376.8 -301.4949221671098 L 415.2 -301.63795450906423 L 453.6 -301.66493517004994 L 492.0 -301.7576294179645 L 530.4 -301.8388655946426 L 568.8 -301.83923333679377 L 607.2 -301.8618359306956 L 645.6 -301.9368204908038 L 684.0 -302.0126024707346" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 330.4 -293.2731620370452 L 330.4 -309.27316203704515 L 346.4 -309.27316203704515 L 346.4 -293.2731620370452 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -301.2731620370452 M 342.4 -301.2731620370452 L 342.4 -301.273 M 342.4 -301.273 A 4 4 0 1 0 334.4 -301.273 A 4 4 0 1 0 342.4 -301.273 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 368.8 -293.4949221671098 L 368.8 -309.4949221671098 L 384.8 -309.4949221671098 L 384.8 -293.4949221671098 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -301.4949221671098 M 380.8 -301.4949221671098 L 380.8 -301.495 M 380.8 -301.495 A 4 4 0 1 0 372.8 -301.495 A 4 4 0 1 0 380.8 -301.495 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 407.2 -293.63795450906423 L 407.2 -309.63795450906423 L 423.2 -309.63795450906423 L 423.2 -293.63795450906423 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -301.63795450906423 M 419.2 -301.63795450906423 L 419.2 -301.638 M 419.2 -301.638 A 4 4 0 1 0 411.2 -301.638 A 4 4 0 1 0 419.2 -301.638 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 445.6 -293.66493517004994 L 445.6 -309.66493517004994 L 461.6 -309.66493517004994 L 461.6 -293.66493517004994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -301.66493517004994 M 457.6 -301.66493517004994 L 457.6 -301.665 M 457.6 -301.665 A 4 4 0 1 0 449.6 -301.665 A 4 4 0 1 0 457.6 -301.665 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 484.0 -293.7576294179645 L 484.0 -309.7576294179645 L 500.0 -309.7576294179645 L 500.0 -293.7576294179645 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -301.7576294179645 M 496.0 -301.7576294179645 L 496 -301.758 M 496 -301.758 A 4 4 0 1 0 488 -301.758 A 4 4 0 1 0 496 -301.758 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 522.4 -293.8388655946426 L 522.4 -309.8388655946426 L 538.4 -309.8388655946426 L 538.4 -293.8388655946426 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -301.8388655946426 M 534.4 -301.8388655946426 L 534.4 -301.839 M 534.4 -301.839 A 4 4 0 1 0 526.4 -301.839 A 4 4 0 1 0 534.4 -301.839 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 560.8 -293.83923333679377 L 560.8 -309.83923333679377 L 576.8 -309.83923333679377 L 576.8 -293.83923333679377 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -301.83923333679377 M 572.8 -301.83923333679377 L 572.8 -301.839 M 572.8 -301.839 A 4 4 0 1 0 564.8 -301.839 A 4 4 0 1 0 572.8 -301.839 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 599.2 -293.8618359306956 L 599.2 -309.8618359306956 L 615.2 -309.8618359306956 L 615.2 -293.8618359306956 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -301.8618359306956 M 611.2 -301.8618359306956 L 611.2 -301.862 M 611.2 -301.862 A 4 4 0 1 0 603.2 -301.862 A 4 4 0 1 0 611.2 -301.862 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 637.6 -293.9368204908038 L 637.6 -309.9368204908038 L 653.6 -309.9368204908038 L 653.6 -293.9368204908038 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -301.9368204908038 M 649.6 -301.9368204908038 L 649.6 -301.937 M 649.6 -301.937 A 4 4 0 1 0 641.6 -301.937 A 4 4 0 1 0 649.6 -301.937 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 676.0 -294.0126024707346 L 676.0 -310.0126024707346 L 692.0 -310.0126024707346 L 692.0 -294.0126024707346 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -302.0126024707346 M 688.0 -302.0126024707346 L 688 -302.013 M 688 -302.013 A 4 4 0 1 0 680 -302.013 A 4 4 0 1 0 688 -302.013 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -301.21855426308167 L 376.8 -301.3938666239687 L 415.2 -301.5214034729639 L 453.6 -301.5967751300734 L 492.0 -301.64746548238446 L 530.4 -301.6999480938112 L 568.8 -301.70047067476287 L 607.2 -301.737020373619 L 645.6 -301.7630836147118 L 684.0 -301.8078707377541" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 332.15 -296.21855426308167 L 332.15 -306.21855426308167 L 344.65 -306.21855426308167 L 344.65 -296.21855426308167 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -296.21855426308167 L 344.65 -296.21855426308167 L 338.4 -306.21855426308167 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 370.55 -296.3938666239687 L 370.55 -306.3938666239687 L 383.05 -306.3938666239687 L 383.05 -296.3938666239687 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -296.3938666239687 L 383.05 -296.3938666239687 L 376.8 -306.3938666239687 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 408.95 -296.5214034729639 L 408.95 -306.5214034729639 L 421.45 -306.5214034729639 L 421.45 -296.5214034729639 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -296.5214034729639 L 421.45 -296.5214034729639 L 415.2 -306.5214034729639 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 447.35 -296.5967751300734 L 447.35 -306.5967751300734 L 459.85 -306.5967751300734 L 459.85 -296.5967751300734 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -296.5967751300734 L 459.85 -296.5967751300734 L 453.6 -306.5967751300734 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 485.75 -296.64746548238446 L 485.75 -306.64746548238446 L 498.25 -306.64746548238446 L 498.25 -296.64746548238446 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -296.64746548238446 L 498.25 -296.64746548238446 L 492.0 -306.64746548238446 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 524.15 -296.6999480938112 L 524.15 -306.6999480938112 L 536.65 -306.6999480938112 L 536.65 -296.6999480938112 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -296.6999480938112 L 536.65 -296.6999480938112 L 530.4 -306.6999480938112 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 562.55 -296.70047067476287 L 562.55 -306.70047067476287 L 575.05 -306.70047067476287 L 575.05 -296.70047067476287 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -296.70047067476287 L 575.05 -296.70047067476287 L 568.8 -306.70047067476287 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 600.95 -296.737020373619 L 600.95 -306.737020373619 L 613.45 -306.737020373619 L 613.45 -296.737020373619 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -296.737020373619 L 613.45 -296.737020373619 L 607.2 -306.737020373619 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 639.35 -296.7630836147118 L 639.35 -306.7630836147118 L 651.85 -306.7630836147118 L 651.85 -296.7630836147118 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -296.7630836147118 L 651.85 -296.7630836147118 L 645.6 -306.7630836147118 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 677.75 -296.8078707377541 L 677.75 -306.8078707377541 L 690.25 -306.8078707377541 L 690.25 -296.8078707377541 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -296.8078707377541 L 690.25 -296.8078707377541 L 684.0 -306.8078707377541 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -301.145958091471 L 376.8 -301.301416247165 L 415.2 -301.37377628960485 L 453.6 -301.4568163383087 L 492.0 -301.46844860319567 L 530.4 -301.521113150213 L 568.8 -301.56170027079196 L 607.2 -301.61290546211467 L 645.6 -301.609247395453 L 684.0 -301.6830319548574" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 330.4 -293.145958091471 L 330.4 -309.145958091471 L 346.4 -309.145958091471 L 346.4 -293.145958091471 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -301.145958091471 M 342.4 -301.145958091471 L 342.4 -301.146 M 342.4 -301.146 A 4 4 0 1 0 334.4 -301.146 A 4 4 0 1 0 342.4 -301.146 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 368.8 -293.301416247165 L 368.8 -309.301416247165 L 384.8 -309.301416247165 L 384.8 -293.301416247165 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -301.301416247165 M 380.8 -301.301416247165 L 380.8 -301.301 M 380.8 -301.301 A 4 4 0 1 0 372.8 -301.301 A 4 4 0 1 0 380.8 -301.301 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 407.2 -293.37377628960485 L 407.2 -309.37377628960485 L 423.2 -309.37377628960485 L 423.2 -293.37377628960485 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -301.37377628960485 M 419.2 -301.37377628960485 L 419.2 -301.374 M 419.2 -301.374 A 4 4 0 1 0 411.2 -301.374 A 4 4 0 1 0 419.2 -301.374 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 445.6 -293.4568163383087 L 445.6 -309.4568163383087 L 461.6 -309.4568163383087 L 461.6 -293.4568163383087 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -301.4568163383087 M 457.6 -301.4568163383087 L 457.6 -301.457 M 457.6 -301.457 A 4 4 0 1 0 449.6 -301.457 A 4 4 0 1 0 457.6 -301.457 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 484.0 -293.46844860319567 L 484.0 -309.46844860319567 L 500.0 -309.46844860319567 L 500.0 -293.46844860319567 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -301.46844860319567 M 496.0 -301.46844860319567 L 496 -301.468 M 496 -301.468 A 4 4 0 1 0 488 -301.468 A 4 4 0 1 0 496 -301.468 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 522.4 -293.521113150213 L 522.4 -309.521113150213 L 538.4 -309.521113150213 L 538.4 -293.521113150213 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -301.521113150213 M 534.4 -301.521113150213 L 534.4 -301.521 M 534.4 -301.521 A 4 4 0 1 0 526.4 -301.521 A 4 4 0 1 0 534.4 -301.521 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 560.8 -293.56170027079196 L 560.8 -309.56170027079196 L 576.8 -309.56170027079196 L 576.8 -293.56170027079196 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -301.56170027079196 M 572.8 -301.56170027079196 L 572.8 -301.562 M 572.8 -301.562 A 4 4 0 1 0 564.8 -301.562 A 4 4 0 1 0 572.8 -301.562 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 599.2 -293.61290546211467 L 599.2 -309.61290546211467 L 615.2 -309.61290546211467 L 615.2 -293.61290546211467 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -301.61290546211467 M 611.2 -301.61290546211467 L 611.2 -301.613 M 611.2 -301.613 A 4 4 0 1 0 603.2 -301.613 A 4 4 0 1 0 611.2 -301.613 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 637.6 -293.609247395453 L 637.6 -309.609247395453 L 653.6 -309.609247395453 L 653.6 -293.609247395453 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -301.609247395453 M 649.6 -301.609247395453 L 649.6 -301.609 M 649.6 -301.609 A 4 4 0 1 0 641.6 -301.609 A 4 4 0 1 0 649.6 -301.609 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 676.0 -293.6830319548574 L 676.0 -309.6830319548574 L 692.0 -309.6830319548574 L 692.0 -293.6830319548574 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -301.6830319548574 M 688.0 -301.6830319548574 L 688 -301.683 M 688 -301.683 A 4 4 0 1 0 680 -301.683 A 4 4 0 1 0 688 -301.683 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 338.4 -300.95331152686896 L 376.8 -301.1261735637382 L 415.2 -301.23934524301774 L 453.6 -301.3144227064063 L 492.0 -301.2903220471097 L 530.4 -301.3784640342898 L 568.8 -301.430160838804 L 607.2 -301.4448937506708 L 645.6 -301.4848963547779 L 684.0 -301.51435830754156" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <path d="M 331.25714285714287 -300.95331152686896 L 345.54285714285714 -300.95331152686896" style="stroke-width:1;"/>
+ <path d="M 338.4 -293.8104543840118 L 338.4 -308.09616866972607" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -301.1261735637382 L 383.9428571428571 -301.1261735637382" style="stroke-width:1;"/>
+ <path d="M 376.8 -293.983316420881 L 376.8 -308.2690307065953" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -301.23934524301774 L 422.34285714285716 -301.23934524301774" style="stroke-width:1;"/>
+ <path d="M 415.2 -294.09648810016057 L 415.2 -308.3822023858749" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -301.3144227064063 L 460.74285714285713 -301.3144227064063" style="stroke-width:1;"/>
+ <path d="M 453.6 -294.1715655635491 L 453.6 -308.45727984926344" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -301.2903220471097 L 499.1428571428571 -301.2903220471097" style="stroke-width:1;"/>
+ <path d="M 492.0 -294.14746490425256 L 492.0 -308.43317918996684" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -301.3784640342898 L 537.5428571428572 -301.3784640342898" style="stroke-width:1;"/>
+ <path d="M 530.4 -294.2356068914326 L 530.4 -308.5213211771469" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -301.430160838804 L 575.9428571428572 -301.430160838804" style="stroke-width:1;"/>
+ <path d="M 568.8 -294.2873036959469 L 568.8 -308.57301798166117" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -301.4448937506708 L 614.3428571428572 -301.4448937506708" style="stroke-width:1;"/>
+ <path d="M 607.2 -294.3020366078137 L 607.2 -308.587750893528" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -301.4848963547779 L 652.7428571428572 -301.4848963547779" style="stroke-width:1;"/>
+ <path d="M 645.6 -294.3420392119208 L 645.6 -308.62775349763507" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -301.51435830754156 L 691.1428571428571 -301.51435830754156" style="stroke-width:1;"/>
+ <path d="M 684.0 -294.3715011646844 L 684.0 -308.65721545039867" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip63);">
+ <path d="M 338.4 -300.99423155086896 L 376.8 -301.0555283610137 L 415.2 -301.08683289550316 L 453.6 -301.1250471114646 L 492.0 -301.16545229645294 L 530.4 -301.18212843526595 L 568.8 -301.1972948957741 L 607.2 -301.20967812884345 L 645.6 -301.24566653704784 L 684.0 -301.24731169930305" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip64);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 334.4 -296.99423155086896 L 334.4 -304.99423155086896 L 342.4 -304.99423155086896 L 342.4 -296.99423155086896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -296.99423155086896 L 334.4 -304.99423155086896 L 342.4 -304.99423155086896 L 342.4 -296.99423155086896 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 372.8 -297.0555283610137 L 372.8 -305.0555283610137 L 380.8 -305.0555283610137 L 380.8 -297.0555283610137 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -297.0555283610137 L 372.8 -305.0555283610137 L 380.8 -305.0555283610137 L 380.8 -297.0555283610137 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 411.2 -297.08683289550316 L 411.2 -305.08683289550316 L 419.2 -305.08683289550316 L 419.2 -297.08683289550316 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -297.08683289550316 L 411.2 -305.08683289550316 L 419.2 -305.08683289550316 L 419.2 -297.08683289550316 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 449.6 -297.1250471114646 L 449.6 -305.1250471114646 L 457.6 -305.1250471114646 L 457.6 -297.1250471114646 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -297.1250471114646 L 449.6 -305.1250471114646 L 457.6 -305.1250471114646 L 457.6 -297.1250471114646 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 488.0 -297.16545229645294 L 488.0 -305.16545229645294 L 496.0 -305.16545229645294 L 496.0 -297.16545229645294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -297.16545229645294 L 488.0 -305.16545229645294 L 496.0 -305.16545229645294 L 496.0 -297.16545229645294 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 526.4 -297.18212843526595 L 526.4 -305.18212843526595 L 534.4 -305.18212843526595 L 534.4 -297.18212843526595 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -297.18212843526595 L 526.4 -305.18212843526595 L 534.4 -305.18212843526595 L 534.4 -297.18212843526595 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 564.8 -297.1972948957741 L 564.8 -305.1972948957741 L 572.8 -305.1972948957741 L 572.8 -297.1972948957741 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -297.1972948957741 L 564.8 -305.1972948957741 L 572.8 -305.1972948957741 L 572.8 -297.1972948957741 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 603.2 -297.20967812884345 L 603.2 -305.20967812884345 L 611.2 -305.20967812884345 L 611.2 -297.20967812884345 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -297.20967812884345 L 603.2 -305.20967812884345 L 611.2 -305.20967812884345 L 611.2 -297.20967812884345 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip73);">
+ <path d="M 641.6 -297.24566653704784 L 641.6 -305.24566653704784 L 649.6 -305.24566653704784 L 649.6 -297.24566653704784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -297.24566653704784 L 641.6 -305.24566653704784 L 649.6 -305.24566653704784 L 649.6 -297.24566653704784 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip74);">
+ <path d="M 680.0 -297.24731169930305 L 680.0 -305.24731169930305 L 688.0 -305.24731169930305 L 688.0 -297.24731169930305 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -297.24731169930305 L 680.0 -305.24731169930305 L 688.0 -305.24731169930305 L 688.0 -297.24731169930305 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 300.75 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 L 313.25 -167.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ binary_heap
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 299.85714285714283 -147.52380952380952 L 299.85714285714283 -161.8095238095238 L 314.14285714285717 -161.8095238095238 L 314.14285714285717 -147.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -154.66666666666666 L 307.0 -161.8095238095238 L 314.14285714285717 -154.66666666666666 L 307.0 -147.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 299.0 -128.66666666666666 L 299.0 -144.66666666666666 L 315.0 -144.66666666666666 L 315.0 -128.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -136.66666666666666 M 311.0 -136.66666666666666 L 311 -136.667 M 311 -136.667 A 4 4 0 1 0 303 -136.667 A 4 4 0 1 0 311 -136.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ thin_heap
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 300.75 -113.66666666666666 L 300.75 -123.66666666666666 L 313.25 -123.66666666666666 L 313.25 -113.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -113.66666666666666 L 313.25 -113.66666666666666 L 307.0 -123.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 299.0 -92.66666666666666 L 299.0 -108.66666666666666 L 315.0 -108.66666666666666 L 315.0 -92.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -100.66666666666666 M 311.0 -100.66666666666666 L 311 -100.667 M 311 -100.667 A 4 4 0 1 0 303 -100.667 A 4 4 0 1 0 311 -100.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -82.66666666666666 L 314.14285714285717 -82.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -75.52380952380952 L 307.0 -89.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ pairing_heap
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -60.66666666666666 L 303.0 -68.66666666666666 L 311.0 -68.66666666666666 L 311.0 -60.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ n_pq_vector
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 496.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -318.16773343074505 L 332.15 -328.16773343074505 L 344.65 -328.16773343074505 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -337.0586693772533 L 370.55 -347.0586693772533 L 383.05 -347.0586693772533 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -361.86261949257675 L 408.95 -371.86261949257675 L 421.45 -371.86261949257675 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -380.73511427346216 L 447.35 -390.73511427346216 L 459.85 -390.73511427346216 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -399.82346775090133 L 485.75 -409.82346775090133 L 498.25 -409.82346775090133 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -421.17639636682566 L 524.15 -431.17639636682566 L 536.65 -431.17639636682566 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -447.52086322302165 L 562.55 -457.52086322302165 L 575.05 -457.52086322302165 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -468.08800406587994 L 600.95 -478.08800406587994 L 613.45 -478.08800406587994 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -490.55555555555554 L 639.35 -500.55555555555554 L 651.85 -500.55555555555554 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 331.25714285714287 -300.4027472925016 L 338.4 -307.5456044353587 L 345.54285714285714 -300.4027472925016 L 338.4 -293.25989014964443 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 369.65714285714284 -300.41168834606566 L 376.8 -307.5545454889228 L 383.9428571428571 -300.41168834606566 L 376.8 -293.26883120320855 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.0571428571429 -300.4143128151101 L 415.2 -307.55716995796723 L 422.34285714285716 -300.4143128151101 L 415.2 -293.27145567225296 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 446.45714285714286 -300.4191036358214 L 453.6 -307.56196077867855 L 460.74285714285713 -300.4191036358214 L 453.6 -293.2762464929642 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 484.8571428571429 -300.4206915172403 L 492.0 -307.5635486600974 L 499.1428571428571 -300.4206915172403 L 492.0 -293.27783437438313 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 523.2571428571429 -300.416048225854 L 530.4 -307.5589053687111 L 537.5428571428572 -300.416048225854 L 530.4 -293.27319108299685 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 561.6571428571428 -300.4108303465704 L 568.8 -307.55368748942755 L 575.9428571428572 -300.4108303465704 L 568.8 -293.26797320371327 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.0571428571428 -300.4126434043274 L 607.2 -307.5555005471846 L 614.3428571428572 -300.4126434043274 L 607.2 -293.26978626147024 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 638.4571428571428 -300.41230175746955 L 645.6 -307.5551589003267 L 652.7428571428572 -300.41230175746955 L 645.6 -293.26944461461244 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 676.8571428571429 -300.4164131668158 L 684.0 -307.5592703096729 L 691.1428571428571 -300.4164131668158 L 684.0 -293.27355602395863 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -300.3679350306264 M 342.4 -300.3679350306264 L 342.4 -300.368 M 342.4 -300.368 A 4 4 0 1 0 334.4 -300.368 A 4 4 0 1 0 342.4 -300.368 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -300.36275092779357 M 380.8 -300.36275092779357 L 380.8 -300.363 M 380.8 -300.363 A 4 4 0 1 0 372.8 -300.363 A 4 4 0 1 0 380.8 -300.363 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -300.3657911965934 M 419.2 -300.3657911965934 L 419.2 -300.366 M 419.2 -300.366 A 4 4 0 1 0 411.2 -300.366 A 4 4 0 1 0 419.2 -300.366 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -300.3609735876626 M 457.6 -300.3609735876626 L 457.6 -300.361 M 457.6 -300.361 A 4 4 0 1 0 449.6 -300.361 A 4 4 0 1 0 457.6 -300.361 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -300.3548728618395 M 496.0 -300.3548728618395 L 496 -300.355 M 496 -300.355 A 4 4 0 1 0 488 -300.355 A 4 4 0 1 0 496 -300.355 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -300.3528784983068 M 534.4 -300.3528784983068 L 534.4 -300.353 M 534.4 -300.353 A 4 4 0 1 0 526.4 -300.353 A 4 4 0 1 0 534.4 -300.353 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -300.3554109556406 M 572.8 -300.3554109556406 L 572.8 -300.355 M 572.8 -300.355 A 4 4 0 1 0 564.8 -300.355 A 4 4 0 1 0 572.8 -300.355 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -300.3563928021219 M 611.2 -300.3563928021219 L 611.2 -300.356 M 611.2 -300.356 A 4 4 0 1 0 603.2 -300.356 A 4 4 0 1 0 611.2 -300.356 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -300.35528244983385 M 649.6 -300.35528244983385 L 649.6 -300.355 M 649.6 -300.355 A 4 4 0 1 0 641.6 -300.355 A 4 4 0 1 0 649.6 -300.355 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -300.35782034245864 M 688.0 -300.35782034245864 L 688 -300.358 M 688 -300.358 A 4 4 0 1 0 680 -300.358 A 4 4 0 1 0 688 -300.358 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 332.15 -295.3071230546335 L 344.65 -295.3071230546335 L 338.4 -305.3071230546335 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 370.55 -295.3156382143305 L 383.05 -295.3156382143305 L 376.8 -305.3156382143305 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 408.95 -295.3187052713498 L 421.45 -295.3187052713498 L 415.2 -305.3187052713498 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 447.35 -295.32374145662266 L 459.85 -295.32374145662266 L 453.6 -305.32374145662266 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 485.75 -295.3164057550554 L 498.25 -295.3164057550554 L 492.0 -305.3164057550554 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 524.15 -295.31882174186956 L 536.65 -295.31882174186956 L 530.4 -305.31882174186956 Z"/>
+ </clipPath>
+ <clipPath id="clip45">
+ <path d="M 562.55 -295.3207601995528 L 575.05 -295.3207601995528 L 568.8 -305.3207601995528 Z"/>
+ </clipPath>
+ <clipPath id="clip46">
+ <path d="M 600.95 -295.3191455299144 L 613.45 -295.3191455299144 L 607.2 -305.3191455299144 Z"/>
+ </clipPath>
+ <clipPath id="clip47">
+ <path d="M 639.35 -295.3245854796556 L 651.85 -295.3245854796556 L 645.6 -305.3245854796556 Z"/>
+ </clipPath>
+ <clipPath id="clip48">
+ <path d="M 677.75 -295.3206068467019 L 690.25 -295.3206068467019 L 684.0 -305.3206068467019 Z"/>
+ </clipPath>
+ <clipPath id="clip49">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip50">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip51">
+ <path d="M 334.4 -296.3438396095061 L 334.4 -304.3438396095061 L 342.4 -304.3438396095061 L 342.4 -296.3438396095061 Z"/>
+ </clipPath>
+ <clipPath id="clip52">
+ <path d="M 372.8 -296.3338794388944 L 372.8 -304.3338794388944 L 380.8 -304.3338794388944 L 380.8 -296.3338794388944 Z"/>
+ </clipPath>
+ <clipPath id="clip53">
+ <path d="M 411.2 -296.3238121154046 L 411.2 -304.3238121154046 L 419.2 -304.3238121154046 L 419.2 -296.3238121154046 Z"/>
+ </clipPath>
+ <clipPath id="clip54">
+ <path d="M 449.6 -296.3146878148895 L 449.6 -304.3146878148895 L 457.6 -304.3146878148895 L 457.6 -296.3146878148895 Z"/>
+ </clipPath>
+ <clipPath id="clip55">
+ <path d="M 488.0 -296.30504172644606 L 488.0 -304.30504172644606 L 496.0 -304.30504172644606 L 496.0 -296.30504172644606 Z"/>
+ </clipPath>
+ <clipPath id="clip56">
+ <path d="M 526.4 -296.3073451250911 L 526.4 -304.3073451250911 L 534.4 -304.3073451250911 L 534.4 -296.3073451250911 Z"/>
+ </clipPath>
+ <clipPath id="clip57">
+ <path d="M 564.8 -296.3064995491179 L 564.8 -304.3064995491179 L 572.8 -304.3064995491179 L 572.8 -296.3064995491179 Z"/>
+ </clipPath>
+ <clipPath id="clip58">
+ <path d="M 603.2 -296.3029930100041 L 603.2 -304.3029930100041 L 611.2 -304.3029930100041 L 611.2 -296.3029930100041 Z"/>
+ </clipPath>
+ <clipPath id="clip59">
+ <path d="M 641.6 -296.3028559630259 L 641.6 -304.3028559630259 L 649.6 -304.3028559630259 L 649.6 -296.3028559630259 Z"/>
+ </clipPath>
+ <clipPath id="clip60">
+ <path d="M 680.0 -296.29986344713916 L 680.0 -304.29986344713916 L 688.0 -304.29986344713916 L 688.0 -296.29986344713916 Z"/>
+ </clipPath>
+ <clipPath id="clip61">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip62">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip63">
+ <path d="M 338.4 -300.25016353519794 M 342.4 -300.25016353519794 L 342.4 -300.25 M 342.4 -300.25 A 4 4 0 1 0 334.4 -300.25 A 4 4 0 1 0 342.4 -300.25 Z"/>
+ </clipPath>
+ <clipPath id="clip64">
+ <path d="M 376.8 -300.2512482639716 M 380.8 -300.2512482639716 L 380.8 -300.251 M 380.8 -300.251 A 4 4 0 1 0 372.8 -300.251 A 4 4 0 1 0 380.8 -300.251 Z"/>
+ </clipPath>
+ <clipPath id="clip65">
+ <path d="M 415.2 -300.24567087901715 M 419.2 -300.24567087901715 L 419.2 -300.246 M 419.2 -300.246 A 4 4 0 1 0 411.2 -300.246 A 4 4 0 1 0 419.2 -300.246 Z"/>
+ </clipPath>
+ <clipPath id="clip66">
+ <path d="M 453.6 -300.242859280671 M 457.6 -300.242859280671 L 457.6 -300.243 M 457.6 -300.243 A 4 4 0 1 0 449.6 -300.243 A 4 4 0 1 0 457.6 -300.243 Z"/>
+ </clipPath>
+ <clipPath id="clip67">
+ <path d="M 492.0 -300.24525158514615 M 496.0 -300.24525158514615 L 496 -300.245 M 496 -300.245 A 4 4 0 1 0 488 -300.245 A 4 4 0 1 0 496 -300.245 Z"/>
+ </clipPath>
+ <clipPath id="clip68">
+ <path d="M 530.4 -300.2462559492612 M 534.4 -300.2462559492612 L 534.4 -300.246 M 534.4 -300.246 A 4 4 0 1 0 526.4 -300.246 A 4 4 0 1 0 534.4 -300.246 Z"/>
+ </clipPath>
+ <clipPath id="clip69">
+ <path d="M 568.8 -300.2437681389599 M 572.8 -300.2437681389599 L 572.8 -300.244 M 572.8 -300.244 A 4 4 0 1 0 564.8 -300.244 A 4 4 0 1 0 572.8 -300.244 Z"/>
+ </clipPath>
+ <clipPath id="clip70">
+ <path d="M 607.2 -300.2443268092195 M 611.2 -300.2443268092195 L 611.2 -300.244 M 611.2 -300.244 A 4 4 0 1 0 603.2 -300.244 A 4 4 0 1 0 611.2 -300.244 Z"/>
+ </clipPath>
+ <clipPath id="clip71">
+ <path d="M 645.6 -300.2448517030284 M 649.6 -300.2448517030284 L 649.6 -300.245 M 649.6 -300.245 A 4 4 0 1 0 641.6 -300.245 A 4 4 0 1 0 649.6 -300.245 Z"/>
+ </clipPath>
+ <clipPath id="clip72">
+ <path d="M 684.0 -300.2464985961773 M 688.0 -300.2464985961773 L 688 -300.246 M 688 -300.246 A 4 4 0 1 0 680 -300.246 A 4 4 0 1 0 688 -300.246 Z"/>
+ </clipPath>
+ <clipPath id="clip73">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip74">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip75">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z"/>
+ </clipPath>
+ <clipPath id="clip76">
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip77">
+ <path d="M 299.85714285714283 -154.66666666666666 L 307.0 -161.8095238095238 L 314.14285714285717 -154.66666666666666 L 307.0 -147.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip78">
+ <path d="M 307.0 -136.66666666666666 M 311.0 -136.66666666666666 L 311 -136.667 M 311 -136.667 A 4 4 0 1 0 303 -136.667 A 4 4 0 1 0 311 -136.667 Z"/>
+ </clipPath>
+ <clipPath id="clip79">
+ <path d="M 300.75 -113.66666666666666 L 313.25 -113.66666666666666 L 307.0 -123.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip80">
+ <path d="M 303.0 -96.66666666666666 L 303.0 -104.66666666666666 L 311.0 -104.66666666666666 L 311.0 -96.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip81">
+ <path d="M 307.0 -82.66666666666666 M 311.0 -82.66666666666666 L 311 -82.6667 M 311 -82.6667 A 4 4 0 1 0 303 -82.6667 A 4 4 0 1 0 311 -82.6667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.13e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.50048673219425">
+ 2.27e-05
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 3.40e-05
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.50048673219425">
+ 4.53e-05
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 5.67e-05
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -323.16773343074505 L 376.8 -342.0586693772533 L 415.2 -366.86261949257675 L 453.6 -385.73511427346216 L 492.0 -404.82346775090133 L 530.4 -426.17639636682566 L 568.8 -452.52086322302165 L 607.2 -473.08800406587994 L 645.6 -495.55555555555554 L 684.0 -520.0" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -318.16773343074505 L 332.15 -328.16773343074505 L 344.65 -328.16773343074505 L 344.65 -318.16773343074505 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -318.16773343074505 L 332.15 -328.16773343074505 L 344.65 -328.16773343074505 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -337.0586693772533 L 370.55 -347.0586693772533 L 383.05 -347.0586693772533 L 383.05 -337.0586693772533 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -337.0586693772533 L 370.55 -347.0586693772533 L 383.05 -347.0586693772533 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -361.86261949257675 L 408.95 -371.86261949257675 L 421.45 -371.86261949257675 L 421.45 -361.86261949257675 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -361.86261949257675 L 408.95 -371.86261949257675 L 421.45 -371.86261949257675 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -380.73511427346216 L 447.35 -390.73511427346216 L 459.85 -390.73511427346216 L 459.85 -380.73511427346216 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -380.73511427346216 L 447.35 -390.73511427346216 L 459.85 -390.73511427346216 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -399.82346775090133 L 485.75 -409.82346775090133 L 498.25 -409.82346775090133 L 498.25 -399.82346775090133 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -399.82346775090133 L 485.75 -409.82346775090133 L 498.25 -409.82346775090133 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -421.17639636682566 L 524.15 -431.17639636682566 L 536.65 -431.17639636682566 L 536.65 -421.17639636682566 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -421.17639636682566 L 524.15 -431.17639636682566 L 536.65 -431.17639636682566 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -447.52086322302165 L 562.55 -457.52086322302165 L 575.05 -457.52086322302165 L 575.05 -447.52086322302165 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -447.52086322302165 L 562.55 -457.52086322302165 L 575.05 -457.52086322302165 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -468.08800406587994 L 600.95 -478.08800406587994 L 613.45 -478.08800406587994 L 613.45 -468.08800406587994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -468.08800406587994 L 600.95 -478.08800406587994 L 613.45 -478.08800406587994 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -490.55555555555554 L 639.35 -500.55555555555554 L 651.85 -500.55555555555554 L 651.85 -490.55555555555554 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -490.55555555555554 L 639.35 -500.55555555555554 L 651.85 -500.55555555555554 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -515.0 L 677.75 -525.0 L 690.25 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -300.4027472925016 L 376.8 -300.41168834606566 L 415.2 -300.4143128151101 L 453.6 -300.4191036358214 L 492.0 -300.4206915172403 L 530.4 -300.416048225854 L 568.8 -300.4108303465704 L 607.2 -300.4126434043274 L 645.6 -300.41230175746955 L 684.0 -300.4164131668158" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 331.25714285714287 -293.25989014964443 L 331.25714285714287 -307.5456044353587 L 345.54285714285714 -307.5456044353587 L 345.54285714285714 -293.25989014964443 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -300.4027472925016 L 338.4 -307.5456044353587 L 345.54285714285714 -300.4027472925016 L 338.4 -293.25989014964443 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 369.65714285714284 -293.26883120320855 L 369.65714285714284 -307.5545454889228 L 383.9428571428571 -307.5545454889228 L 383.9428571428571 -293.26883120320855 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -300.41168834606566 L 376.8 -307.5545454889228 L 383.9428571428571 -300.41168834606566 L 376.8 -293.26883120320855 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.0571428571429 -293.27145567225296 L 408.0571428571429 -307.55716995796723 L 422.34285714285716 -307.55716995796723 L 422.34285714285716 -293.27145567225296 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -300.4143128151101 L 415.2 -307.55716995796723 L 422.34285714285716 -300.4143128151101 L 415.2 -293.27145567225296 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 446.45714285714286 -293.2762464929642 L 446.45714285714286 -307.56196077867855 L 460.74285714285713 -307.56196077867855 L 460.74285714285713 -293.2762464929642 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -300.4191036358214 L 453.6 -307.56196077867855 L 460.74285714285713 -300.4191036358214 L 453.6 -293.2762464929642 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.8571428571429 -293.27783437438313 L 484.8571428571429 -307.5635486600974 L 499.1428571428571 -307.5635486600974 L 499.1428571428571 -293.27783437438313 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -300.4206915172403 L 492.0 -307.5635486600974 L 499.1428571428571 -300.4206915172403 L 492.0 -293.27783437438313 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 523.2571428571429 -293.27319108299685 L 523.2571428571429 -307.5589053687111 L 537.5428571428572 -307.5589053687111 L 537.5428571428572 -293.27319108299685 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -300.416048225854 L 530.4 -307.5589053687111 L 537.5428571428572 -300.416048225854 L 530.4 -293.27319108299685 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 561.6571428571428 -293.26797320371327 L 561.6571428571428 -307.55368748942755 L 575.9428571428572 -307.55368748942755 L 575.9428571428572 -293.26797320371327 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -300.4108303465704 L 568.8 -307.55368748942755 L 575.9428571428572 -300.4108303465704 L 568.8 -293.26797320371327 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.0571428571428 -293.26978626147024 L 600.0571428571428 -307.5555005471846 L 614.3428571428572 -307.5555005471846 L 614.3428571428572 -293.26978626147024 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -300.4126434043274 L 607.2 -307.5555005471846 L 614.3428571428572 -300.4126434043274 L 607.2 -293.26978626147024 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 638.4571428571428 -293.26944461461244 L 638.4571428571428 -307.5551589003267 L 652.7428571428572 -307.5551589003267 L 652.7428571428572 -293.26944461461244 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -300.41230175746955 L 645.6 -307.5551589003267 L 652.7428571428572 -300.41230175746955 L 645.6 -293.26944461461244 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.8571428571429 -293.27355602395863 L 676.8571428571429 -307.5592703096729 L 691.1428571428571 -307.5592703096729 L 691.1428571428571 -293.27355602395863 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -300.4164131668158 L 684.0 -307.5592703096729 L 691.1428571428571 -300.4164131668158 L 684.0 -293.27355602395863 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -300.3679350306264 L 376.8 -300.36275092779357 L 415.2 -300.3657911965934 L 453.6 -300.3609735876626 L 492.0 -300.3548728618395 L 530.4 -300.3528784983068 L 568.8 -300.3554109556406 L 607.2 -300.3563928021219 L 645.6 -300.35528244983385 L 684.0 -300.35782034245864" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 330.4 -292.3679350306264 L 330.4 -308.3679350306264 L 346.4 -308.3679350306264 L 346.4 -292.3679350306264 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -300.3679350306264 M 342.4 -300.3679350306264 L 342.4 -300.368 M 342.4 -300.368 A 4 4 0 1 0 334.4 -300.368 A 4 4 0 1 0 342.4 -300.368 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 368.8 -292.36275092779357 L 368.8 -308.36275092779357 L 384.8 -308.36275092779357 L 384.8 -292.36275092779357 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -300.36275092779357 M 380.8 -300.36275092779357 L 380.8 -300.363 M 380.8 -300.363 A 4 4 0 1 0 372.8 -300.363 A 4 4 0 1 0 380.8 -300.363 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 407.2 -292.3657911965934 L 407.2 -308.3657911965934 L 423.2 -308.3657911965934 L 423.2 -292.3657911965934 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -300.3657911965934 M 419.2 -300.3657911965934 L 419.2 -300.366 M 419.2 -300.366 A 4 4 0 1 0 411.2 -300.366 A 4 4 0 1 0 419.2 -300.366 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 445.6 -292.3609735876626 L 445.6 -308.3609735876626 L 461.6 -308.3609735876626 L 461.6 -292.3609735876626 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -300.3609735876626 M 457.6 -300.3609735876626 L 457.6 -300.361 M 457.6 -300.361 A 4 4 0 1 0 449.6 -300.361 A 4 4 0 1 0 457.6 -300.361 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 484.0 -292.3548728618395 L 484.0 -308.3548728618395 L 500.0 -308.3548728618395 L 500.0 -292.3548728618395 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -300.3548728618395 M 496.0 -300.3548728618395 L 496 -300.355 M 496 -300.355 A 4 4 0 1 0 488 -300.355 A 4 4 0 1 0 496 -300.355 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 522.4 -292.3528784983068 L 522.4 -308.3528784983068 L 538.4 -308.3528784983068 L 538.4 -292.3528784983068 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -300.3528784983068 M 534.4 -300.3528784983068 L 534.4 -300.353 M 534.4 -300.353 A 4 4 0 1 0 526.4 -300.353 A 4 4 0 1 0 534.4 -300.353 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 560.8 -292.3554109556406 L 560.8 -308.3554109556406 L 576.8 -308.3554109556406 L 576.8 -292.3554109556406 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -300.3554109556406 M 572.8 -300.3554109556406 L 572.8 -300.355 M 572.8 -300.355 A 4 4 0 1 0 564.8 -300.355 A 4 4 0 1 0 572.8 -300.355 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 599.2 -292.3563928021219 L 599.2 -308.3563928021219 L 615.2 -308.3563928021219 L 615.2 -292.3563928021219 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -300.3563928021219 M 611.2 -300.3563928021219 L 611.2 -300.356 M 611.2 -300.356 A 4 4 0 1 0 603.2 -300.356 A 4 4 0 1 0 611.2 -300.356 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 637.6 -292.35528244983385 L 637.6 -308.35528244983385 L 653.6 -308.35528244983385 L 653.6 -292.35528244983385 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -300.35528244983385 M 649.6 -300.35528244983385 L 649.6 -300.355 M 649.6 -300.355 A 4 4 0 1 0 641.6 -300.355 A 4 4 0 1 0 649.6 -300.355 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 676.0 -292.35782034245864 L 676.0 -308.35782034245864 L 692.0 -308.35782034245864 L 692.0 -292.35782034245864 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -300.35782034245864 M 688.0 -300.35782034245864 L 688 -300.358 M 688 -300.358 A 4 4 0 1 0 680 -300.358 A 4 4 0 1 0 688 -300.358 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -300.3071230546335 L 376.8 -300.3156382143305 L 415.2 -300.3187052713498 L 453.6 -300.32374145662266 L 492.0 -300.3164057550554 L 530.4 -300.31882174186956 L 568.8 -300.3207601995528 L 607.2 -300.3191455299144 L 645.6 -300.3245854796556 L 684.0 -300.3206068467019" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 332.15 -295.3071230546335 L 332.15 -305.3071230546335 L 344.65 -305.3071230546335 L 344.65 -295.3071230546335 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -295.3071230546335 L 344.65 -295.3071230546335 L 338.4 -305.3071230546335 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 370.55 -295.3156382143305 L 370.55 -305.3156382143305 L 383.05 -305.3156382143305 L 383.05 -295.3156382143305 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -295.3156382143305 L 383.05 -295.3156382143305 L 376.8 -305.3156382143305 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 408.95 -295.3187052713498 L 408.95 -305.3187052713498 L 421.45 -305.3187052713498 L 421.45 -295.3187052713498 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -295.3187052713498 L 421.45 -295.3187052713498 L 415.2 -305.3187052713498 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 447.35 -295.32374145662266 L 447.35 -305.32374145662266 L 459.85 -305.32374145662266 L 459.85 -295.32374145662266 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -295.32374145662266 L 459.85 -295.32374145662266 L 453.6 -305.32374145662266 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 485.75 -295.3164057550554 L 485.75 -305.3164057550554 L 498.25 -305.3164057550554 L 498.25 -295.3164057550554 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -295.3164057550554 L 498.25 -295.3164057550554 L 492.0 -305.3164057550554 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 524.15 -295.31882174186956 L 524.15 -305.31882174186956 L 536.65 -305.31882174186956 L 536.65 -295.31882174186956 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -295.31882174186956 L 536.65 -295.31882174186956 L 530.4 -305.31882174186956 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip45);">
+ <path d="M 562.55 -295.3207601995528 L 562.55 -305.3207601995528 L 575.05 -305.3207601995528 L 575.05 -295.3207601995528 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -295.3207601995528 L 575.05 -295.3207601995528 L 568.8 -305.3207601995528 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip46);">
+ <path d="M 600.95 -295.3191455299144 L 600.95 -305.3191455299144 L 613.45 -305.3191455299144 L 613.45 -295.3191455299144 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -295.3191455299144 L 613.45 -295.3191455299144 L 607.2 -305.3191455299144 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip47);">
+ <path d="M 639.35 -295.3245854796556 L 639.35 -305.3245854796556 L 651.85 -305.3245854796556 L 651.85 -295.3245854796556 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -295.3245854796556 L 651.85 -295.3245854796556 L 645.6 -305.3245854796556 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip48);">
+ <path d="M 677.75 -295.3206068467019 L 677.75 -305.3206068467019 L 690.25 -305.3206068467019 L 690.25 -295.3206068467019 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -295.3206068467019 L 690.25 -295.3206068467019 L 684.0 -305.3206068467019 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip49);">
+ <path d="M 338.4 -300.3438396095061 L 376.8 -300.3338794388944 L 415.2 -300.3238121154046 L 453.6 -300.3146878148895 L 492.0 -300.30504172644606 L 530.4 -300.3073451250911 L 568.8 -300.3064995491179 L 607.2 -300.3029930100041 L 645.6 -300.3028559630259 L 684.0 -300.29986344713916" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip50);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip51);">
+ <path d="M 334.4 -296.3438396095061 L 334.4 -304.3438396095061 L 342.4 -304.3438396095061 L 342.4 -296.3438396095061 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 334.4 -296.3438396095061 L 334.4 -304.3438396095061 L 342.4 -304.3438396095061 L 342.4 -296.3438396095061 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip52);">
+ <path d="M 372.8 -296.3338794388944 L 372.8 -304.3338794388944 L 380.8 -304.3338794388944 L 380.8 -296.3338794388944 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 372.8 -296.3338794388944 L 372.8 -304.3338794388944 L 380.8 -304.3338794388944 L 380.8 -296.3338794388944 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip53);">
+ <path d="M 411.2 -296.3238121154046 L 411.2 -304.3238121154046 L 419.2 -304.3238121154046 L 419.2 -296.3238121154046 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 411.2 -296.3238121154046 L 411.2 -304.3238121154046 L 419.2 -304.3238121154046 L 419.2 -296.3238121154046 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip54);">
+ <path d="M 449.6 -296.3146878148895 L 449.6 -304.3146878148895 L 457.6 -304.3146878148895 L 457.6 -296.3146878148895 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 449.6 -296.3146878148895 L 449.6 -304.3146878148895 L 457.6 -304.3146878148895 L 457.6 -296.3146878148895 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip55);">
+ <path d="M 488.0 -296.30504172644606 L 488.0 -304.30504172644606 L 496.0 -304.30504172644606 L 496.0 -296.30504172644606 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 488.0 -296.30504172644606 L 488.0 -304.30504172644606 L 496.0 -304.30504172644606 L 496.0 -296.30504172644606 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip56);">
+ <path d="M 526.4 -296.3073451250911 L 526.4 -304.3073451250911 L 534.4 -304.3073451250911 L 534.4 -296.3073451250911 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 526.4 -296.3073451250911 L 526.4 -304.3073451250911 L 534.4 -304.3073451250911 L 534.4 -296.3073451250911 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip57);">
+ <path d="M 564.8 -296.3064995491179 L 564.8 -304.3064995491179 L 572.8 -304.3064995491179 L 572.8 -296.3064995491179 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 564.8 -296.3064995491179 L 564.8 -304.3064995491179 L 572.8 -304.3064995491179 L 572.8 -296.3064995491179 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip58);">
+ <path d="M 603.2 -296.3029930100041 L 603.2 -304.3029930100041 L 611.2 -304.3029930100041 L 611.2 -296.3029930100041 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 603.2 -296.3029930100041 L 603.2 -304.3029930100041 L 611.2 -304.3029930100041 L 611.2 -296.3029930100041 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip59);">
+ <path d="M 641.6 -296.3028559630259 L 641.6 -304.3028559630259 L 649.6 -304.3028559630259 L 649.6 -296.3028559630259 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 641.6 -296.3028559630259 L 641.6 -304.3028559630259 L 649.6 -304.3028559630259 L 649.6 -296.3028559630259 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip60);">
+ <path d="M 680.0 -296.29986344713916 L 680.0 -304.29986344713916 L 688.0 -304.29986344713916 L 688.0 -296.29986344713916 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 680.0 -296.29986344713916 L 680.0 -304.29986344713916 L 688.0 -304.29986344713916 L 688.0 -296.29986344713916 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip61);">
+ <path d="M 338.4 -300.25016353519794 L 376.8 -300.2512482639716 L 415.2 -300.24567087901715 L 453.6 -300.242859280671 L 492.0 -300.24525158514615 L 530.4 -300.2462559492612 L 568.8 -300.2437681389599 L 607.2 -300.2443268092195 L 645.6 -300.2448517030284 L 684.0 -300.2464985961773" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip62);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip63);">
+ <path d="M 330.4 -292.25016353519794 L 330.4 -308.25016353519794 L 346.4 -308.25016353519794 L 346.4 -292.25016353519794 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -300.25016353519794 M 342.4 -300.25016353519794 L 342.4 -300.25 M 342.4 -300.25 A 4 4 0 1 0 334.4 -300.25 A 4 4 0 1 0 342.4 -300.25 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip64);">
+ <path d="M 368.8 -292.2512482639716 L 368.8 -308.2512482639716 L 384.8 -308.2512482639716 L 384.8 -292.2512482639716 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -300.2512482639716 M 380.8 -300.2512482639716 L 380.8 -300.251 M 380.8 -300.251 A 4 4 0 1 0 372.8 -300.251 A 4 4 0 1 0 380.8 -300.251 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip65);">
+ <path d="M 407.2 -292.24567087901715 L 407.2 -308.24567087901715 L 423.2 -308.24567087901715 L 423.2 -292.24567087901715 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -300.24567087901715 M 419.2 -300.24567087901715 L 419.2 -300.246 M 419.2 -300.246 A 4 4 0 1 0 411.2 -300.246 A 4 4 0 1 0 419.2 -300.246 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip66);">
+ <path d="M 445.6 -292.242859280671 L 445.6 -308.242859280671 L 461.6 -308.242859280671 L 461.6 -292.242859280671 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -300.242859280671 M 457.6 -300.242859280671 L 457.6 -300.243 M 457.6 -300.243 A 4 4 0 1 0 449.6 -300.243 A 4 4 0 1 0 457.6 -300.243 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip67);">
+ <path d="M 484.0 -292.24525158514615 L 484.0 -308.24525158514615 L 500.0 -308.24525158514615 L 500.0 -292.24525158514615 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -300.24525158514615 M 496.0 -300.24525158514615 L 496 -300.245 M 496 -300.245 A 4 4 0 1 0 488 -300.245 A 4 4 0 1 0 496 -300.245 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip68);">
+ <path d="M 522.4 -292.2462559492612 L 522.4 -308.2462559492612 L 538.4 -308.2462559492612 L 538.4 -292.2462559492612 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -300.2462559492612 M 534.4 -300.2462559492612 L 534.4 -300.246 M 534.4 -300.246 A 4 4 0 1 0 526.4 -300.246 A 4 4 0 1 0 534.4 -300.246 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip69);">
+ <path d="M 560.8 -292.2437681389599 L 560.8 -308.2437681389599 L 576.8 -308.2437681389599 L 576.8 -292.2437681389599 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -300.2437681389599 M 572.8 -300.2437681389599 L 572.8 -300.244 M 572.8 -300.244 A 4 4 0 1 0 564.8 -300.244 A 4 4 0 1 0 572.8 -300.244 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip70);">
+ <path d="M 599.2 -292.2443268092195 L 599.2 -308.2443268092195 L 615.2 -308.2443268092195 L 615.2 -292.2443268092195 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -300.2443268092195 M 611.2 -300.2443268092195 L 611.2 -300.244 M 611.2 -300.244 A 4 4 0 1 0 603.2 -300.244 A 4 4 0 1 0 611.2 -300.244 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip71);">
+ <path d="M 637.6 -292.2448517030284 L 637.6 -308.2448517030284 L 653.6 -308.2448517030284 L 653.6 -292.2448517030284 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -300.2448517030284 M 649.6 -300.2448517030284 L 649.6 -300.245 M 649.6 -300.245 A 4 4 0 1 0 641.6 -300.245 A 4 4 0 1 0 649.6 -300.245 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip72);">
+ <path d="M 676.0 -292.2464985961773 L 676.0 -308.2464985961773 L 692.0 -308.2464985961773 L 692.0 -292.2464985961773 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -300.2464985961773 M 688.0 -300.2464985961773 L 688 -300.246 M 688 -300.246 A 4 4 0 1 0 680 -300.246 A 4 4 0 1 0 688 -300.246 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip73);">
+ <path d="M 338.4 -300.23584076715247 L 376.8 -300.2364266138667 L 415.2 -300.23523706162524 L 453.6 -300.23551154381676 L 492.0 -300.23574914367697 L 530.4 -300.2377640836682 L 568.8 -300.23631868451844 L 607.2 -300.23606206114 L 645.6 -300.2364860138318 L 684.0 -300.236227837513" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip74);">
+ <path d="M 331.25714285714287 -300.23584076715247 L 345.54285714285714 -300.23584076715247" style="stroke-width:1;"/>
+ <path d="M 338.4 -293.09298362429536 L 338.4 -307.37869791000963" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -300.2364266138667 L 383.9428571428571 -300.2364266138667" style="stroke-width:1;"/>
+ <path d="M 376.8 -293.0935694710096 L 376.8 -307.37928375672385" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -300.23523706162524 L 422.34285714285716 -300.23523706162524" style="stroke-width:1;"/>
+ <path d="M 415.2 -293.09237991876813 L 415.2 -307.3780942044824" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -300.23551154381676 L 460.74285714285713 -300.23551154381676" style="stroke-width:1;"/>
+ <path d="M 453.6 -293.0926544009596 L 453.6 -307.37836868667387" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -300.23574914367697 L 499.1428571428571 -300.23574914367697" style="stroke-width:1;"/>
+ <path d="M 492.0 -293.09289200081986 L 492.0 -307.37860628653414" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -300.2377640836682 L 537.5428571428572 -300.2377640836682" style="stroke-width:1;"/>
+ <path d="M 530.4 -293.09490694081103 L 530.4 -307.3806212265253" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -300.23631868451844 L 575.9428571428572 -300.23631868451844" style="stroke-width:1;"/>
+ <path d="M 568.8 -293.09346154166127 L 568.8 -307.37917582737555" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -300.23606206114 L 614.3428571428572 -300.23606206114" style="stroke-width:1;"/>
+ <path d="M 607.2 -293.0932049182828 L 607.2 -307.3789192039971" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -300.2364860138318 L 652.7428571428572 -300.2364860138318" style="stroke-width:1;"/>
+ <path d="M 645.6 -293.0936288709746 L 645.6 -307.3793431566889" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -300.236227837513 L 691.1428571428571 -300.236227837513" style="stroke-width:1;"/>
+ <path d="M 684.0 -293.0933706946559 L 684.0 -307.3790849803702" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip75);">
+ <path d="M 290 -54 L 290 -182 L 324 -182 L 324 -54 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -172.66666666666669 L 314 -172.66666666666669" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip76);">
+ <path d="M 300.75 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 L 313.25 -167.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -167.66666666666669 L 300.75 -177.66666666666669 L 313.25 -177.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-168.0">
+ binary_heap
+ </text>
+ <path d="M 300 -154.66666666666666 L 314 -154.66666666666666" style="stroke:rgb(126,126,126);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip77);">
+ <path d="M 299.85714285714283 -147.52380952380952 L 299.85714285714283 -161.8095238095238 L 314.14285714285717 -161.8095238095238 L 314.14285714285717 -147.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -154.66666666666666 L 307.0 -161.8095238095238 L 314.14285714285717 -154.66666666666666 L 307.0 -147.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-150.0">
+ rc_binomial_heap
+ </text>
+ <path d="M 300 -136.66666666666666 L 314 -136.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip78);">
+ <path d="M 299.0 -128.66666666666666 L 299.0 -144.66666666666666 L 315.0 -144.66666666666666 L 315.0 -128.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -136.66666666666666 M 311.0 -136.66666666666666 L 311 -136.667 M 311 -136.667 A 4 4 0 1 0 303 -136.667 A 4 4 0 1 0 311 -136.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-132.0">
+ n_pq_deque
+ </text>
+ <path d="M 300 -118.66666666666666 L 314 -118.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip79);">
+ <path d="M 300.75 -113.66666666666666 L 300.75 -123.66666666666666 L 313.25 -123.66666666666666 L 313.25 -113.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -113.66666666666666 L 313.25 -113.66666666666666 L 307.0 -123.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-114.0">
+ binomial_heap
+ </text>
+ <path d="M 300 -100.66666666666666 L 314 -100.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip80);">
+ <path d="M 303.0 -96.66666666666666 L 303.0 -104.66666666666666 L 311.0 -104.66666666666666 L 311.0 -96.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 303.0 -96.66666666666666 L 303.0 -104.66666666666666 L 311.0 -104.66666666666666 L 311.0 -96.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-96.0">
+ n_pq_vector
+ </text>
+ <path d="M 300 -82.66666666666666 L 314 -82.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip81);">
+ <path d="M 299.0 -74.66666666666666 L 299.0 -90.66666666666666 L 315.0 -90.66666666666666 L 315.0 -74.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -82.66666666666666 M 311.0 -82.66666666666666 L 311 -82.6667 M 311 -82.6667 A 4 4 0 1 0 303 -82.6667 A 4 4 0 1 0 311 -82.6667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-78.0">
+ thin_heap
+ </text>
+ <path d="M 300 -64.66666666666666 L 314 -64.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -64.66666666666666 L 314.14285714285717 -64.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -57.52380952380952 L 307.0 -71.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-60.0">
+ pairing_heap
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 436.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -496.38583390432836 L 332.15 -506.38583390432836 L 344.65 -506.38583390432836 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -501.14870645437264 L 370.55 -511.14870645437264 L 383.05 -511.14870645437264 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -503.9233937620248 L 408.95 -513.9233937620247 L 421.45 -513.9233937620247 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -498.9791190031008 L 447.35 -508.9791190031008 L 459.85 -508.9791190031008 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -502.67912790675166 L 485.75 -512.6791279067517 L 498.25 -512.6791279067517 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -507.3547059666074 L 524.15 -517.3547059666074 L 536.65 -517.3547059666074 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -512.2585271812977 L 562.55 -522.2585271812977 L 575.05 -522.2585271812977 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -515.0 L 600.95 -525.0 L 613.45 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -495.34426159700524 L 639.35 -505.34426159700524 L 651.85 -505.34426159700524 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -502.64250680355065 L 677.75 -512.6425068035506 L 690.25 -512.6425068035506 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 331.25714285714287 -455.5362126966062 L 338.4 -462.6790698394633 L 345.54285714285714 -455.5362126966062 L 338.4 -448.393355553749 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 369.65714285714284 -468.721513156112 L 376.8 -475.8643702989691 L 383.9428571428571 -468.721513156112 L 376.8 -461.57865601325483 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.0571428571429 -461.8588887469466 L 415.2 -469.0017458898038 L 422.34285714285716 -461.8588887469466 L 415.2 -454.7160316040895 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 446.45714285714286 -471.6609954281688 L 453.6 -478.80385257102597 L 460.74285714285713 -471.6609954281688 L 453.6 -464.5181382853117 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 484.8571428571429 -461.42454542991084 L 492.0 -468.56740257276795 L 499.1428571428571 -461.42454542991084 L 492.0 -454.2816882870537 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 523.2571428571429 -464.7826154280914 L 530.4 -471.9254725709485 L 537.5428571428572 -464.7826154280914 L 530.4 -457.6397582852343 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 561.6571428571428 -466.54724161024455 L 568.8 -473.6900987531017 L 575.9428571428572 -466.54724161024455 L 568.8 -459.40438446738744 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.0571428571428 -468.4081046449959 L 607.2 -475.55096178785305 L 614.3428571428572 -468.4081046449959 L 607.2 -461.2652475021388 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 638.4571428571428 -471.27051226961805 L 645.6 -478.41336941247516 L 652.7428571428572 -471.27051226961805 L 645.6 -464.1276551267609 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 676.8571428571429 -476.00017033071254 L 684.0 -483.1430274735697 L 691.1428571428571 -476.00017033071254 L 684.0 -468.8573131878554 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 331.25714285714287 -450.31046643517175 L 338.4 -457.45332357802886 L 345.54285714285714 -450.31046643517175 L 338.4 -443.1676092923146 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 369.65714285714284 -461.6353296867076 L 376.8 -468.7781868295648 L 383.9428571428571 -461.6353296867076 L 376.8 -454.49247254385045 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 408.0571428571429 -455.21599095698764 L 415.2 -462.35884809984475 L 422.34285714285716 -455.21599095698764 L 415.2 -448.0731338141305 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 446.45714285714286 -459.3839834934055 L 453.6 -466.5268406362626 L 460.74285714285713 -459.3839834934055 L 453.6 -452.24112635054837 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 484.8571428571429 -455.7793597887899 L 492.0 -462.9222169316471 L 499.1428571428571 -455.7793597887899 L 492.0 -448.63650264593275 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 523.2571428571429 -461.76605850859977 L 530.4 -468.90891565145694 L 537.5428571428572 -461.76605850859977 L 530.4 -454.6232013657426 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 561.6571428571428 -461.75498701228315 L 568.8 -468.8978441551403 L 575.9428571428572 -461.75498701228315 L 568.8 -454.612129869426 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 600.0571428571428 -463.8381316269293 L 607.2 -470.98098876978645 L 614.3428571428572 -463.8381316269293 L 607.2 -456.6952744840721 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 638.4571428571428 -464.7826154280914 L 645.6 -471.9254725709485 L 652.7428571428572 -464.7826154280914 L 645.6 -457.6397582852343 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 676.8571428571429 -468.12535566214126 L 684.0 -475.2682128049984 L 691.1428571428571 -468.12535566214126 L 684.0 -460.98249851928415 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 307.0 -173.66666666666669 L 300.75 -183.66666666666669 L 313.25 -183.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 299.85714285714283 -160.66666666666666 L 307.0 -167.8095238095238 L 314.14285714285717 -160.66666666666666 L 307.0 -153.52380952380952 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 299.85714285714283 -124.66666666666666 L 307.0 -131.8095238095238 L 314.14285714285717 -124.66666666666666 L 307.0 -117.52380952380952 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.03e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 2.07e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.50048673219425">
+ 3.10e-08
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 4.13e-08
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 5.17e-08
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -501.38583390432836 L 376.8 -506.14870645437264 L 415.2 -508.9233937620248 L 453.6 -503.9791190031008 L 492.0 -507.67912790675166 L 530.4 -512.3547059666074 L 568.8 -517.2585271812977 L 607.2 -520.0 L 645.6 -500.34426159700524 L 684.0 -507.64250680355065" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -496.38583390432836 L 332.15 -506.38583390432836 L 344.65 -506.38583390432836 L 344.65 -496.38583390432836 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -496.38583390432836 L 332.15 -506.38583390432836 L 344.65 -506.38583390432836 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -501.14870645437264 L 370.55 -511.14870645437264 L 383.05 -511.14870645437264 L 383.05 -501.14870645437264 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -501.14870645437264 L 370.55 -511.14870645437264 L 383.05 -511.14870645437264 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -503.9233937620248 L 408.95 -513.9233937620247 L 421.45 -513.9233937620247 L 421.45 -503.9233937620248 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -503.9233937620248 L 408.95 -513.9233937620247 L 421.45 -513.9233937620247 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -498.9791190031008 L 447.35 -508.9791190031008 L 459.85 -508.9791190031008 L 459.85 -498.9791190031008 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -498.9791190031008 L 447.35 -508.9791190031008 L 459.85 -508.9791190031008 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -502.67912790675166 L 485.75 -512.6791279067517 L 498.25 -512.6791279067517 L 498.25 -502.67912790675166 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -502.67912790675166 L 485.75 -512.6791279067517 L 498.25 -512.6791279067517 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -507.3547059666074 L 524.15 -517.3547059666074 L 536.65 -517.3547059666074 L 536.65 -507.3547059666074 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -507.3547059666074 L 524.15 -517.3547059666074 L 536.65 -517.3547059666074 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -512.2585271812977 L 562.55 -522.2585271812977 L 575.05 -522.2585271812977 L 575.05 -512.2585271812977 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -512.2585271812977 L 562.55 -522.2585271812977 L 575.05 -522.2585271812977 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -515.0 L 600.95 -525.0 L 613.45 -525.0 L 613.45 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -515.0 L 600.95 -525.0 L 613.45 -525.0 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -495.34426159700524 L 639.35 -505.34426159700524 L 651.85 -505.34426159700524 L 651.85 -495.34426159700524 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -495.34426159700524 L 639.35 -505.34426159700524 L 651.85 -505.34426159700524 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -502.64250680355065 L 677.75 -512.6425068035506 L 690.25 -512.6425068035506 L 690.25 -502.64250680355065 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -502.64250680355065 L 677.75 -512.6425068035506 L 690.25 -512.6425068035506 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -455.5362126966062 L 376.8 -468.721513156112 L 415.2 -461.8588887469466 L 453.6 -471.6609954281688 L 492.0 -461.42454542991084 L 530.4 -464.7826154280914 L 568.8 -466.54724161024455 L 607.2 -468.4081046449959 L 645.6 -471.27051226961805 L 684.0 -476.00017033071254" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 331.25714285714287 -448.393355553749 L 331.25714285714287 -462.6790698394633 L 345.54285714285714 -462.6790698394633 L 345.54285714285714 -448.393355553749 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -455.5362126966062 L 338.4 -462.6790698394633 L 345.54285714285714 -455.5362126966062 L 338.4 -448.393355553749 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 369.65714285714284 -461.57865601325483 L 369.65714285714284 -475.8643702989691 L 383.9428571428571 -475.8643702989691 L 383.9428571428571 -461.57865601325483 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -468.721513156112 L 376.8 -475.8643702989691 L 383.9428571428571 -468.721513156112 L 376.8 -461.57865601325483 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.0571428571429 -454.7160316040895 L 408.0571428571429 -469.0017458898038 L 422.34285714285716 -469.0017458898038 L 422.34285714285716 -454.7160316040895 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -461.8588887469466 L 415.2 -469.0017458898038 L 422.34285714285716 -461.8588887469466 L 415.2 -454.7160316040895 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 446.45714285714286 -464.5181382853117 L 446.45714285714286 -478.80385257102597 L 460.74285714285713 -478.80385257102597 L 460.74285714285713 -464.5181382853117 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -471.6609954281688 L 453.6 -478.80385257102597 L 460.74285714285713 -471.6609954281688 L 453.6 -464.5181382853117 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.8571428571429 -454.2816882870537 L 484.8571428571429 -468.56740257276795 L 499.1428571428571 -468.56740257276795 L 499.1428571428571 -454.2816882870537 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -461.42454542991084 L 492.0 -468.56740257276795 L 499.1428571428571 -461.42454542991084 L 492.0 -454.2816882870537 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 523.2571428571429 -457.6397582852343 L 523.2571428571429 -471.9254725709485 L 537.5428571428572 -471.9254725709485 L 537.5428571428572 -457.6397582852343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -464.7826154280914 L 530.4 -471.9254725709485 L 537.5428571428572 -464.7826154280914 L 530.4 -457.6397582852343 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 561.6571428571428 -459.40438446738744 L 561.6571428571428 -473.6900987531017 L 575.9428571428572 -473.6900987531017 L 575.9428571428572 -459.40438446738744 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -466.54724161024455 L 568.8 -473.6900987531017 L 575.9428571428572 -466.54724161024455 L 568.8 -459.40438446738744 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.0571428571428 -461.2652475021388 L 600.0571428571428 -475.55096178785305 L 614.3428571428572 -475.55096178785305 L 614.3428571428572 -461.2652475021388 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -468.4081046449959 L 607.2 -475.55096178785305 L 614.3428571428572 -468.4081046449959 L 607.2 -461.2652475021388 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 638.4571428571428 -464.1276551267609 L 638.4571428571428 -478.41336941247516 L 652.7428571428572 -478.41336941247516 L 652.7428571428572 -464.1276551267609 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -471.27051226961805 L 645.6 -478.41336941247516 L 652.7428571428572 -471.27051226961805 L 645.6 -464.1276551267609 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.8571428571429 -468.8573131878554 L 676.8571428571429 -483.1430274735697 L 691.1428571428571 -483.1430274735697 L 691.1428571428571 -468.8573131878554 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -476.00017033071254 L 684.0 -483.1430274735697 L 691.1428571428571 -476.00017033071254 L 684.0 -468.8573131878554 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -450.6179133713481 L 376.8 -459.85665122076796 L 415.2 -456.44024295353455 L 453.6 -462.55767049523655 L 492.0 -459.1502045904127 L 530.4 -463.2419741329586 L 568.8 -461.3444899950062 L 607.2 -464.93165480158405 L 645.6 -463.6831306784969 L 684.0 -468.5511824435489" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 333.4 -445.6179133713481 L 343.4 -455.6179133713481" style="stroke-width:0.7;"/>
+ <path d="M 343.4 -445.6179133713481 L 333.4 -455.6179133713481" style="stroke-width:0.7;"/>
+ <path d="M 371.8 -454.85665122076796 L 381.8 -464.85665122076796" style="stroke-width:0.7;"/>
+ <path d="M 381.8 -454.85665122076796 L 371.8 -464.85665122076796" style="stroke-width:0.7;"/>
+ <path d="M 410.2 -451.44024295353455 L 420.2 -461.44024295353455" style="stroke-width:0.7;"/>
+ <path d="M 420.2 -451.44024295353455 L 410.2 -461.44024295353455" style="stroke-width:0.7;"/>
+ <path d="M 448.6 -457.55767049523655 L 458.6 -467.55767049523655" style="stroke-width:0.7;"/>
+ <path d="M 458.6 -457.55767049523655 L 448.6 -467.55767049523655" style="stroke-width:0.7;"/>
+ <path d="M 487.0 -454.1502045904127 L 497.0 -464.1502045904127" style="stroke-width:0.7;"/>
+ <path d="M 497.0 -454.1502045904127 L 487.0 -464.1502045904127" style="stroke-width:0.7;"/>
+ <path d="M 525.4 -458.2419741329586 L 535.4 -468.2419741329586" style="stroke-width:0.7;"/>
+ <path d="M 535.4 -458.2419741329586 L 525.4 -468.2419741329586" style="stroke-width:0.7;"/>
+ <path d="M 563.8 -456.3444899950062 L 573.8 -466.3444899950062" style="stroke-width:0.7;"/>
+ <path d="M 573.8 -456.3444899950062 L 563.8 -466.3444899950062" style="stroke-width:0.7;"/>
+ <path d="M 602.2 -459.93165480158405 L 612.2 -469.93165480158405" style="stroke-width:0.7;"/>
+ <path d="M 612.2 -459.93165480158405 L 602.2 -469.93165480158405" style="stroke-width:0.7;"/>
+ <path d="M 640.6 -458.6831306784969 L 650.6 -468.6831306784969" style="stroke-width:0.7;"/>
+ <path d="M 650.6 -458.6831306784969 L 640.6 -468.6831306784969" style="stroke-width:0.7;"/>
+ <path d="M 679.0 -463.5511824435489 L 689.0 -473.5511824435489" style="stroke-width:0.7;"/>
+ <path d="M 689.0 -463.5511824435489 L 679.0 -473.5511824435489" style="stroke-width:0.7;"/>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 338.4 -450.31046643517175 L 376.8 -461.6353296867076 L 415.2 -455.21599095698764 L 453.6 -459.3839834934055 L 492.0 -455.7793597887899 L 530.4 -461.76605850859977 L 568.8 -461.75498701228315 L 607.2 -463.8381316269293 L 645.6 -464.7826154280914 L 684.0 -468.12535566214126" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip29);">
+ <path d="M 331.25714285714287 -443.1676092923146 L 331.25714285714287 -457.45332357802886 L 345.54285714285714 -457.45332357802886 L 345.54285714285714 -443.1676092923146 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 331.25714285714287 -450.31046643517175 L 338.4 -457.45332357802886 L 345.54285714285714 -450.31046643517175 L 338.4 -443.1676092923146 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip30);">
+ <path d="M 369.65714285714284 -454.49247254385045 L 369.65714285714284 -468.7781868295648 L 383.9428571428571 -468.7781868295648 L 383.9428571428571 -454.49247254385045 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 369.65714285714284 -461.6353296867076 L 376.8 -468.7781868295648 L 383.9428571428571 -461.6353296867076 L 376.8 -454.49247254385045 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip31);">
+ <path d="M 408.0571428571429 -448.0731338141305 L 408.0571428571429 -462.35884809984475 L 422.34285714285716 -462.35884809984475 L 422.34285714285716 -448.0731338141305 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.0571428571429 -455.21599095698764 L 415.2 -462.35884809984475 L 422.34285714285716 -455.21599095698764 L 415.2 -448.0731338141305 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip32);">
+ <path d="M 446.45714285714286 -452.24112635054837 L 446.45714285714286 -466.5268406362626 L 460.74285714285713 -466.5268406362626 L 460.74285714285713 -452.24112635054837 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 446.45714285714286 -459.3839834934055 L 453.6 -466.5268406362626 L 460.74285714285713 -459.3839834934055 L 453.6 -452.24112635054837 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip33);">
+ <path d="M 484.8571428571429 -448.63650264593275 L 484.8571428571429 -462.9222169316471 L 499.1428571428571 -462.9222169316471 L 499.1428571428571 -448.63650264593275 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 484.8571428571429 -455.7793597887899 L 492.0 -462.9222169316471 L 499.1428571428571 -455.7793597887899 L 492.0 -448.63650264593275 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip34);">
+ <path d="M 523.2571428571429 -454.6232013657426 L 523.2571428571429 -468.90891565145694 L 537.5428571428572 -468.90891565145694 L 537.5428571428572 -454.6232013657426 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 523.2571428571429 -461.76605850859977 L 530.4 -468.90891565145694 L 537.5428571428572 -461.76605850859977 L 530.4 -454.6232013657426 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip35);">
+ <path d="M 561.6571428571428 -454.612129869426 L 561.6571428571428 -468.8978441551403 L 575.9428571428572 -468.8978441551403 L 575.9428571428572 -454.612129869426 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 561.6571428571428 -461.75498701228315 L 568.8 -468.8978441551403 L 575.9428571428572 -461.75498701228315 L 568.8 -454.612129869426 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip36);">
+ <path d="M 600.0571428571428 -456.6952744840721 L 600.0571428571428 -470.98098876978645 L 614.3428571428572 -470.98098876978645 L 614.3428571428572 -456.6952744840721 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.0571428571428 -463.8381316269293 L 607.2 -470.98098876978645 L 614.3428571428572 -463.8381316269293 L 607.2 -456.6952744840721 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip37);">
+ <path d="M 638.4571428571428 -457.6397582852343 L 638.4571428571428 -471.9254725709485 L 652.7428571428572 -471.9254725709485 L 652.7428571428572 -457.6397582852343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 638.4571428571428 -464.7826154280914 L 645.6 -471.9254725709485 L 652.7428571428572 -464.7826154280914 L 645.6 -457.6397582852343 Z"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip38);">
+ <path d="M 676.8571428571429 -460.98249851928415 L 676.8571428571429 -475.2682128049984 L 691.1428571428571 -475.2682128049984 L 691.1428571428571 -460.98249851928415 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 676.8571428571429 -468.12535566214126 L 684.0 -475.2682128049984 L 691.1428571428571 -468.12535566214126 L 684.0 -460.98249851928415 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -178.66666666666669 L 314 -178.66666666666669" style="stroke:rgb(0,138,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 300.75 -173.66666666666669 L 300.75 -183.66666666666669 L 313.25 -183.66666666666669 L 313.25 -173.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -173.66666666666669 L 300.75 -183.66666666666669 L 313.25 -183.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-174.0">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -160.66666666666666 L 314 -160.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 299.85714285714283 -153.52380952380952 L 299.85714285714283 -167.8095238095238 L 314.14285714285717 -167.8095238095238 L 314.14285714285717 -153.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -160.66666666666666 L 307.0 -167.8095238095238 L 314.14285714285717 -160.66666666666666 L 307.0 -153.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-156.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </text>
+ <path d="M 300 -142.66666666666666 L 314 -142.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <path d="M 302.0 -137.66666666666666 L 312.0 -147.66666666666666" style="stroke-width:0.7;"/>
+ <path d="M 312.0 -137.66666666666666 L 302.0 -147.66666666666666" style="stroke-width:0.7;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-138.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </text>
+ <path d="M 300 -124.66666666666666 L 314 -124.66666666666666" style="stroke:rgb(0,0,128);stroke-width:2;"/>
+ <g style="fill:rgb(179,179,179);clip-path:url(#clip42);">
+ <path d="M 299.85714285714283 -117.52380952380952 L 299.85714285714283 -131.8095238095238 L 314.14285714285717 -131.8095238095238 L 314.14285714285717 -117.52380952380952 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 299.85714285714283 -124.66666666666666 L 307.0 -131.8095238095238 L 314.14285714285717 -124.66666666666666 L 307.0 -117.52380952380952 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-120.0">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 456.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 332.15 -468.622253854465 L 344.65 -468.622253854465 L 338.4 -478.622253854465 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 370.55 -482.62170995411145 L 383.05 -482.62170995411145 L 376.8 -492.62170995411145 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 408.95 -489.1856562206765 L 421.45 -489.1856562206765 L 415.2 -499.1856562206765 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 447.35 -505.09425156126355 L 459.85 -505.09425156126355 L 453.6 -515.0942515612635 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 485.75 -501.21560504014326 L 498.25 -501.21560504014326 L 492.0 -511.21560504014326 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 524.15 -502.36798778919206 L 536.65 -502.36798778919206 L 530.4 -512.3679877891921 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 562.55 -506.37276039229425 L 575.05 -506.37276039229425 L 568.8 -516.3727603922943 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 600.95 -506.75006063753943 L 613.45 -506.75006063753943 L 607.2 -516.7500606375395 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 639.35 -507.93855641006166 L 651.85 -507.93855641006166 L 645.6 -517.9385564100617 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 677.75 -515.0 L 690.25 -515.0 L 684.0 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -403.52687529246896 M 342.4 -403.52687529246896 L 342.4 -403.527 M 342.4 -403.527 A 4 4 0 1 0 334.4 -403.527 A 4 4 0 1 0 342.4 -403.527 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -413.02082746353784 M 380.8 -413.02082746353784 L 380.8 -413.021 M 380.8 -413.021 A 4 4 0 1 0 372.8 -413.021 A 4 4 0 1 0 380.8 -413.021 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -418.247513860884 M 419.2 -418.247513860884 L 419.2 -418.248 M 419.2 -418.248 A 4 4 0 1 0 411.2 -418.248 A 4 4 0 1 0 419.2 -418.248 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -422.1644294068791 M 457.6 -422.1644294068791 L 457.6 -422.164 M 457.6 -422.164 A 4 4 0 1 0 449.6 -422.164 A 4 4 0 1 0 457.6 -422.164 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -425.3224324595811 M 496.0 -425.3224324595811 L 496 -425.322 M 496 -425.322 A 4 4 0 1 0 488 -425.322 A 4 4 0 1 0 496 -425.322 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -429.79936936959007 M 534.4 -429.79936936959007 L 534.4 -429.799 M 534.4 -429.799 A 4 4 0 1 0 526.4 -429.799 A 4 4 0 1 0 534.4 -429.799 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -428.9951808468676 M 572.8 -428.9951808468676 L 572.8 -428.995 M 572.8 -428.995 A 4 4 0 1 0 564.8 -428.995 A 4 4 0 1 0 572.8 -428.995 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -431.82062068340343 M 611.2 -431.82062068340343 L 611.2 -431.821 M 611.2 -431.821 A 4 4 0 1 0 603.2 -431.821 A 4 4 0 1 0 611.2 -431.821 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -433.77234095202164 M 649.6 -433.77234095202164 L 649.6 -433.772 M 649.6 -433.772 A 4 4 0 1 0 641.6 -433.772 A 4 4 0 1 0 649.6 -433.772 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -438.55650806173026 M 688.0 -438.55650806173026 L 688 -438.557 M 688 -438.557 A 4 4 0 1 0 680 -438.557 A 4 4 0 1 0 688 -438.557 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 338.4 -393.9971163481256 L 332.15 -403.9971163481256 L 344.65 -403.9971163481256 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 376.8 -403.633364611687 L 370.55 -413.633364611687 L 383.05 -413.633364611687 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 415.2 -408.16797455918345 L 408.95 -418.16797455918345 L 421.45 -418.16797455918345 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 453.6 -413.2480528612343 L 447.35 -423.2480528612343 L 459.85 -423.2480528612343 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 492.0 -415.9101755916141 L 485.75 -425.9101755916141 L 498.25 -425.9101755916141 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 530.4 -419.83032513971136 L 524.15 -429.83032513971136 L 536.65 -429.83032513971136 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 568.8 -419.63143401043214 L 562.55 -429.63143401043214 L 575.05 -429.63143401043214 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 607.2 -422.79321006558655 L 600.95 -432.79321006558655 L 613.45 -432.79321006558655 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 645.6 -425.52701984256294 L 639.35 -435.52701984256294 L 651.85 -435.52701984256294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 684.0 -432.30656624926803 L 677.75 -442.30656624926803 L 690.25 -442.30656624926803 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 300.75 -171.66666666666669 L 313.25 -171.66666666666669 L 307.0 -181.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip43">
+ <path d="M 307.0 -158.66666666666666 M 311.0 -158.66666666666666 L 311 -158.667 M 311 -158.667 A 4 4 0 1 0 303 -158.667 A 4 4 0 1 0 311 -158.667 Z"/>
+ </clipPath>
+ <clipPath id="clip44">
+ <path d="M 307.0 -117.66666666666666 L 300.75 -127.66666666666666 L 313.25 -127.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 8.16e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.50048673219425">
+ 1.63e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.50048673219425">
+ 2.45e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.50048673219425">
+ 3.27e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.08e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -473.622253854465 L 376.8 -487.62170995411145 L 415.2 -494.1856562206765 L 453.6 -510.09425156126355 L 492.0 -506.21560504014326 L 530.4 -507.36798778919206 L 568.8 -511.37276039229425 L 607.2 -511.75006063753943 L 645.6 -512.9385564100617 L 684.0 -520.0" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -468.622253854465 L 332.15 -478.622253854465 L 344.65 -478.622253854465 L 344.65 -468.622253854465 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -468.622253854465 L 344.65 -468.622253854465 L 338.4 -478.622253854465 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -482.62170995411145 L 370.55 -492.62170995411145 L 383.05 -492.62170995411145 L 383.05 -482.62170995411145 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -482.62170995411145 L 383.05 -482.62170995411145 L 376.8 -492.62170995411145 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -489.1856562206765 L 408.95 -499.1856562206765 L 421.45 -499.1856562206765 L 421.45 -489.1856562206765 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -489.1856562206765 L 421.45 -489.1856562206765 L 415.2 -499.1856562206765 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -505.09425156126355 L 447.35 -515.0942515612635 L 459.85 -515.0942515612635 L 459.85 -505.09425156126355 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -505.09425156126355 L 459.85 -505.09425156126355 L 453.6 -515.0942515612635 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -501.21560504014326 L 485.75 -511.21560504014326 L 498.25 -511.21560504014326 L 498.25 -501.21560504014326 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -501.21560504014326 L 498.25 -501.21560504014326 L 492.0 -511.21560504014326 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -502.36798778919206 L 524.15 -512.3679877891921 L 536.65 -512.3679877891921 L 536.65 -502.36798778919206 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -502.36798778919206 L 536.65 -502.36798778919206 L 530.4 -512.3679877891921 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -506.37276039229425 L 562.55 -516.3727603922943 L 575.05 -516.3727603922943 L 575.05 -506.37276039229425 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -506.37276039229425 L 575.05 -506.37276039229425 L 568.8 -516.3727603922943 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -506.75006063753943 L 600.95 -516.7500606375395 L 613.45 -516.7500606375395 L 613.45 -506.75006063753943 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -506.75006063753943 L 613.45 -506.75006063753943 L 607.2 -516.7500606375395 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -507.93855641006166 L 639.35 -517.9385564100617 L 651.85 -517.9385564100617 L 651.85 -507.93855641006166 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -507.93855641006166 L 651.85 -507.93855641006166 L 645.6 -517.9385564100617 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -515.0 L 690.25 -515.0 L 684.0 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -403.52687529246896 L 376.8 -413.02082746353784 L 415.2 -418.247513860884 L 453.6 -422.1644294068791 L 492.0 -425.3224324595811 L 530.4 -429.79936936959007 L 568.8 -428.9951808468676 L 607.2 -431.82062068340343 L 645.6 -433.77234095202164 L 684.0 -438.55650806173026" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -395.52687529246896 L 330.4 -411.52687529246896 L 346.4 -411.52687529246896 L 346.4 -395.52687529246896 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -403.52687529246896 M 342.4 -403.52687529246896 L 342.4 -403.527 M 342.4 -403.527 A 4 4 0 1 0 334.4 -403.527 A 4 4 0 1 0 342.4 -403.527 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -405.02082746353784 L 368.8 -421.02082746353784 L 384.8 -421.02082746353784 L 384.8 -405.02082746353784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -413.02082746353784 M 380.8 -413.02082746353784 L 380.8 -413.021 M 380.8 -413.021 A 4 4 0 1 0 372.8 -413.021 A 4 4 0 1 0 380.8 -413.021 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -410.247513860884 L 407.2 -426.247513860884 L 423.2 -426.247513860884 L 423.2 -410.247513860884 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -418.247513860884 M 419.2 -418.247513860884 L 419.2 -418.248 M 419.2 -418.248 A 4 4 0 1 0 411.2 -418.248 A 4 4 0 1 0 419.2 -418.248 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -414.1644294068791 L 445.6 -430.1644294068791 L 461.6 -430.1644294068791 L 461.6 -414.1644294068791 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -422.1644294068791 M 457.6 -422.1644294068791 L 457.6 -422.164 M 457.6 -422.164 A 4 4 0 1 0 449.6 -422.164 A 4 4 0 1 0 457.6 -422.164 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -417.3224324595811 L 484.0 -433.3224324595811 L 500.0 -433.3224324595811 L 500.0 -417.3224324595811 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -425.3224324595811 M 496.0 -425.3224324595811 L 496 -425.322 M 496 -425.322 A 4 4 0 1 0 488 -425.322 A 4 4 0 1 0 496 -425.322 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -421.79936936959007 L 522.4 -437.79936936959007 L 538.4 -437.79936936959007 L 538.4 -421.79936936959007 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -429.79936936959007 M 534.4 -429.79936936959007 L 534.4 -429.799 M 534.4 -429.799 A 4 4 0 1 0 526.4 -429.799 A 4 4 0 1 0 534.4 -429.799 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -420.9951808468676 L 560.8 -436.9951808468676 L 576.8 -436.9951808468676 L 576.8 -420.9951808468676 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -428.9951808468676 M 572.8 -428.9951808468676 L 572.8 -428.995 M 572.8 -428.995 A 4 4 0 1 0 564.8 -428.995 A 4 4 0 1 0 572.8 -428.995 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -423.82062068340343 L 599.2 -439.82062068340343 L 615.2 -439.82062068340343 L 615.2 -423.82062068340343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -431.82062068340343 M 611.2 -431.82062068340343 L 611.2 -431.821 M 611.2 -431.821 A 4 4 0 1 0 603.2 -431.821 A 4 4 0 1 0 611.2 -431.821 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -425.77234095202164 L 637.6 -441.77234095202164 L 653.6 -441.77234095202164 L 653.6 -425.77234095202164 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -433.77234095202164 M 649.6 -433.77234095202164 L 649.6 -433.772 M 649.6 -433.772 A 4 4 0 1 0 641.6 -433.772 A 4 4 0 1 0 649.6 -433.772 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -430.55650806173026 L 676.0 -446.55650806173026 L 692.0 -446.55650806173026 L 692.0 -430.55650806173026 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -438.55650806173026 M 688.0 -438.55650806173026 L 688 -438.557 M 688 -438.557 A 4 4 0 1 0 680 -438.557 A 4 4 0 1 0 688 -438.557 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -402.5658376677945 L 376.8 -409.8191653824575 L 415.2 -415.3277489630368 L 453.6 -420.7436244833559 L 492.0 -424.83032513971136 L 530.4 -426.7313793753966 L 568.8 -430.35992973395435 L 607.2 -431.82062068340343 L 645.6 -434.12646418220174 L 684.0 -436.1536444998689" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <path d="M 333.4 -397.5658376677945 L 343.4 -407.5658376677945" style="stroke-width:1;"/>
+ <path d="M 343.4 -397.5658376677945 L 333.4 -407.5658376677945" style="stroke-width:1;"/>
+ <path d="M 338.4 -395.4958376677945 L 338.4 -409.6358376677945" style="stroke-width:1;"/>
+ <path d="M 331.33 -402.5658376677945 L 345.47 -402.5658376677945" style="stroke-width:1;"/>
+ <path d="M 371.8 -404.8191653824575 L 381.8 -414.8191653824575" style="stroke-width:1;"/>
+ <path d="M 381.8 -404.8191653824575 L 371.8 -414.8191653824575" style="stroke-width:1;"/>
+ <path d="M 376.8 -402.7491653824575 L 376.8 -416.88916538245746" style="stroke-width:1;"/>
+ <path d="M 369.73 -409.8191653824575 L 383.87 -409.8191653824575" style="stroke-width:1;"/>
+ <path d="M 410.2 -410.3277489630368 L 420.2 -420.3277489630368" style="stroke-width:1;"/>
+ <path d="M 420.2 -410.3277489630368 L 410.2 -420.3277489630368" style="stroke-width:1;"/>
+ <path d="M 415.2 -408.2577489630368 L 415.2 -422.3977489630368" style="stroke-width:1;"/>
+ <path d="M 408.13 -415.3277489630368 L 422.27 -415.3277489630368" style="stroke-width:1;"/>
+ <path d="M 448.6 -415.7436244833559 L 458.6 -425.7436244833559" style="stroke-width:1;"/>
+ <path d="M 458.6 -415.7436244833559 L 448.6 -425.7436244833559" style="stroke-width:1;"/>
+ <path d="M 453.6 -413.6736244833559 L 453.6 -427.8136244833559" style="stroke-width:1;"/>
+ <path d="M 446.53 -420.7436244833559 L 460.66999999999996 -420.7436244833559" style="stroke-width:1;"/>
+ <path d="M 487.0 -419.83032513971136 L 497.0 -429.83032513971136" style="stroke-width:1;"/>
+ <path d="M 497.0 -419.83032513971136 L 487.0 -429.83032513971136" style="stroke-width:1;"/>
+ <path d="M 492.0 -417.76032513971137 L 492.0 -431.90032513971136" style="stroke-width:1;"/>
+ <path d="M 484.93 -424.83032513971136 L 499.07 -424.83032513971136" style="stroke-width:1;"/>
+ <path d="M 525.4 -421.7313793753966 L 535.4 -431.7313793753966" style="stroke-width:1;"/>
+ <path d="M 535.4 -421.7313793753966 L 525.4 -431.7313793753966" style="stroke-width:1;"/>
+ <path d="M 530.4 -419.66137937539656 L 530.4 -433.80137937539655" style="stroke-width:1;"/>
+ <path d="M 523.33 -426.7313793753966 L 537.47 -426.7313793753966" style="stroke-width:1;"/>
+ <path d="M 563.8 -425.35992973395435 L 573.8 -435.35992973395435" style="stroke-width:1;"/>
+ <path d="M 573.8 -425.35992973395435 L 563.8 -435.35992973395435" style="stroke-width:1;"/>
+ <path d="M 568.8 -423.2899297339543 L 568.8 -437.4299297339543" style="stroke-width:1;"/>
+ <path d="M 561.73 -430.35992973395435 L 575.87 -430.35992973395435" style="stroke-width:1;"/>
+ <path d="M 602.2 -426.82062068340343 L 612.2 -436.82062068340343" style="stroke-width:1;"/>
+ <path d="M 612.2 -426.82062068340343 L 602.2 -436.82062068340343" style="stroke-width:1;"/>
+ <path d="M 607.2 -424.75062068340344 L 607.2 -438.8906206834034" style="stroke-width:1;"/>
+ <path d="M 600.13 -431.82062068340343 L 614.27 -431.82062068340343" style="stroke-width:1;"/>
+ <path d="M 640.6 -429.12646418220174 L 650.6 -439.12646418220174" style="stroke-width:1;"/>
+ <path d="M 650.6 -429.12646418220174 L 640.6 -439.12646418220174" style="stroke-width:1;"/>
+ <path d="M 645.6 -427.0564641822017 L 645.6 -441.1964641822017" style="stroke-width:1;"/>
+ <path d="M 638.53 -434.12646418220174 L 652.6700000000001 -434.12646418220174" style="stroke-width:1;"/>
+ <path d="M 679.0 -431.1536444998689 L 689.0 -441.1536444998689" style="stroke-width:1;"/>
+ <path d="M 689.0 -431.1536444998689 L 679.0 -441.1536444998689" style="stroke-width:1;"/>
+ <path d="M 684.0 -429.0836444998689 L 684.0 -443.2236444998689" style="stroke-width:1;"/>
+ <path d="M 676.9300000000001 -436.1536444998689 L 691.0699999999999 -436.1536444998689" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 338.4 -398.9971163481256 L 376.8 -408.633364611687 L 415.2 -413.16797455918345 L 453.6 -418.2480528612343 L 492.0 -420.9101755916141 L 530.4 -424.83032513971136 L 568.8 -424.63143401043214 L 607.2 -427.79321006558655 L 645.6 -430.52701984256294 L 684.0 -437.30656624926803" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 332.15 -393.9971163481256 L 332.15 -403.9971163481256 L 344.65 -403.9971163481256 L 344.65 -393.9971163481256 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -393.9971163481256 L 332.15 -403.9971163481256 L 344.65 -403.9971163481256 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 370.55 -403.633364611687 L 370.55 -413.633364611687 L 383.05 -413.633364611687 L 383.05 -403.633364611687 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -403.633364611687 L 370.55 -413.633364611687 L 383.05 -413.633364611687 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 408.95 -408.16797455918345 L 408.95 -418.16797455918345 L 421.45 -418.16797455918345 L 421.45 -408.16797455918345 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -408.16797455918345 L 408.95 -418.16797455918345 L 421.45 -418.16797455918345 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 447.35 -413.2480528612343 L 447.35 -423.2480528612343 L 459.85 -423.2480528612343 L 459.85 -413.2480528612343 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -413.2480528612343 L 447.35 -423.2480528612343 L 459.85 -423.2480528612343 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 485.75 -415.9101755916141 L 485.75 -425.9101755916141 L 498.25 -425.9101755916141 L 498.25 -415.9101755916141 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -415.9101755916141 L 485.75 -425.9101755916141 L 498.25 -425.9101755916141 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 524.15 -419.83032513971136 L 524.15 -429.83032513971136 L 536.65 -429.83032513971136 L 536.65 -419.83032513971136 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -419.83032513971136 L 524.15 -429.83032513971136 L 536.65 -429.83032513971136 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 562.55 -419.63143401043214 L 562.55 -429.63143401043214 L 575.05 -429.63143401043214 L 575.05 -419.63143401043214 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -419.63143401043214 L 562.55 -429.63143401043214 L 575.05 -429.63143401043214 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 600.95 -422.79321006558655 L 600.95 -432.79321006558655 L 613.45 -432.79321006558655 L 613.45 -422.79321006558655 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -422.79321006558655 L 600.95 -432.79321006558655 L 613.45 -432.79321006558655 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 639.35 -425.52701984256294 L 639.35 -435.52701984256294 L 651.85 -435.52701984256294 L 651.85 -425.52701984256294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -425.52701984256294 L 639.35 -435.52701984256294 L 651.85 -435.52701984256294 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 677.75 -432.30656624926803 L 677.75 -442.30656624926803 L 690.25 -442.30656624926803 L 690.25 -432.30656624926803 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -432.30656624926803 L 677.75 -442.30656624926803 L 690.25 -442.30656624926803 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip39);">
+ <path d="M 338.4 -322.3193038075475 L 376.8 -324.7628079958252 L 415.2 -326.1047571680922 L 453.6 -327.0899959084973 L 492.0 -327.74984013739606 L 530.4 -328.4702680056742 L 568.8 -329.30447884791124 L 607.2 -330.3272859127358 L 645.6 -331.0778978006336 L 684.0 -332.3542506302629" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip40);">
+ <path d="M 331.25714285714287 -322.3193038075475 L 345.54285714285714 -322.3193038075475" style="stroke-width:1;"/>
+ <path d="M 338.4 -315.17644666469033 L 338.4 -329.4621609504046" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -324.7628079958252 L 383.9428571428571 -324.7628079958252" style="stroke-width:1;"/>
+ <path d="M 376.8 -317.61995085296803 L 376.8 -331.90566513868237" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -326.1047571680922 L 422.34285714285716 -326.1047571680922" style="stroke-width:1;"/>
+ <path d="M 415.2 -318.961900025235 L 415.2 -333.2476143109493" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -327.0899959084973 L 460.74285714285713 -327.0899959084973" style="stroke-width:1;"/>
+ <path d="M 453.6 -319.9471387656402 L 453.6 -334.2328530513545" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -327.74984013739606 L 499.1428571428571 -327.74984013739606" style="stroke-width:1;"/>
+ <path d="M 492.0 -320.60698299453895 L 492.0 -334.89269728025323" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -328.4702680056742 L 537.5428571428572 -328.4702680056742" style="stroke-width:1;"/>
+ <path d="M 530.4 -321.3274108628171 L 530.4 -335.61312514853137" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -329.30447884791124 L 575.9428571428572 -329.30447884791124" style="stroke-width:1;"/>
+ <path d="M 568.8 -322.16162170505413 L 568.8 -336.4473359907684" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -330.3272859127358 L 614.3428571428572 -330.3272859127358" style="stroke-width:1;"/>
+ <path d="M 607.2 -323.1844287698787 L 607.2 -337.470143055593" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -331.0778978006336 L 652.7428571428572 -331.0778978006336" style="stroke-width:1;"/>
+ <path d="M 645.6 -323.9350406577764 L 645.6 -338.2207549434907" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -332.3542506302629 L 691.1428571428571 -332.3542506302629" style="stroke-width:1;"/>
+ <path d="M 684.0 -325.21139348740576 L 684.0 -339.49710777312004" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 290 -94 L 290 -186 L 324 -186 L 324 -94 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -176.66666666666669 L 314 -176.66666666666669" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 300.75 -171.66666666666669 L 300.75 -181.66666666666669 L 313.25 -181.66666666666669 L 313.25 -171.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -171.66666666666669 L 313.25 -171.66666666666669 L 307.0 -181.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-172.0">
+ splay_tree_map
+ </text>
+ <path d="M 300 -158.66666666666666 L 314 -158.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip43);">
+ <path d="M 299.0 -150.66666666666666 L 299.0 -166.66666666666666 L 315.0 -166.66666666666666 L 315.0 -150.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -158.66666666666666 M 311.0 -158.66666666666666 L 311 -158.667 M 311 -158.667 A 4 4 0 1 0 303 -158.667 A 4 4 0 1 0 311 -158.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-154.0">
+ n_map
+ </text>
+ <path d="M 300 -140.66666666666666 L 314 -140.66666666666666" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 302.0 -135.66666666666666 L 312.0 -145.66666666666666" style="stroke-width:1;"/>
+ <path d="M 312.0 -135.66666666666666 L 302.0 -145.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -133.59666666666666 L 307.0 -147.73666666666665" style="stroke-width:1;"/>
+ <path d="M 299.93 -140.66666666666666 L 314.07 -140.66666666666666" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-136.0">
+ ov_tree_map
+ </text>
+ <path d="M 300 -122.66666666666666 L 314 -122.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip44);">
+ <path d="M 300.75 -117.66666666666666 L 300.75 -127.66666666666666 L 313.25 -127.66666666666666 L 313.25 -117.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -117.66666666666666 L 300.75 -127.66666666666666 L 313.25 -127.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-118.0">
+ rb_tree_map
+ </text>
+ <path d="M 300 -104.66666666666666 L 314 -104.66666666666666" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -104.66666666666666 L 314.14285714285717 -104.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -97.52380952380952 L 307.0 -111.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-100.0">
+ pat_trie_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -322.06561176470586 M 342.4 -322.06561176470586 L 342.4 -322.066 M 342.4 -322.066 A 4 4 0 1 0 334.4 -322.066 A 4 4 0 1 0 342.4 -322.066 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -344.57510588235294 M 380.8 -344.57510588235294 L 380.8 -344.575 M 380.8 -344.575 A 4 4 0 1 0 372.8 -344.575 A 4 4 0 1 0 380.8 -344.575 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -365.5832941176471 M 419.2 -365.5832941176471 L 419.2 -365.583 M 419.2 -365.583 A 4 4 0 1 0 411.2 -365.583 A 4 4 0 1 0 419.2 -365.583 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -388.23527058823527 M 457.6 -388.23527058823527 L 457.6 -388.235 M 457.6 -388.235 A 4 4 0 1 0 449.6 -388.235 A 4 4 0 1 0 457.6 -388.235 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -409.1637411764706 M 496.0 -409.1637411764706 L 496 -409.164 M 496 -409.164 A 4 4 0 1 0 488 -409.164 A 4 4 0 1 0 496 -409.164 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -432.1948941176471 M 534.4 -432.1948941176471 L 534.4 -432.195 M 534.4 -432.195 A 4 4 0 1 0 526.4 -432.195 A 4 4 0 1 0 534.4 -432.195 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -454.4516470588235 M 572.8 -454.4516470588235 L 572.8 -454.452 M 572.8 -454.452 A 4 4 0 1 0 564.8 -454.452 A 4 4 0 1 0 572.8 -454.452 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -477.41938823529415 M 611.2 -477.41938823529415 L 611.2 -477.419 M 611.2 -477.419 A 4 4 0 1 0 603.2 -477.419 A 4 4 0 1 0 611.2 -477.419 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -498.4314588235294 M 649.6 -498.4314588235294 L 649.6 -498.431 M 649.6 -498.431 A 4 4 0 1 0 641.6 -498.431 A 4 4 0 1 0 649.6 -498.431 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 332.15 -298.8908164705882 L 344.65 -298.8908164705882 L 338.4 -308.8908164705882 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 370.55 -302.3455670588235 L 383.05 -302.3455670588235 L 376.8 -312.3455670588235 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.95 -305.83665647058825 L 421.45 -305.83665647058825 L 415.2 -315.83665647058825 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 447.35 -313.0193717647059 L 459.85 -313.0193717647059 L 453.6 -323.0193717647059 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 485.75 -323.3473882352941 L 498.25 -323.3473882352941 L 492.0 -333.34738823529415 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 524.15 -332.54545882352943 L 536.65 -332.54545882352943 L 530.4 -342.54545882352943 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 562.55 -341.8346352941177 L 575.05 -341.8346352941177 L 568.8 -351.8346352941177 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.95 -350.7190117647059 L 613.45 -350.7190117647059 L 607.2 -360.7190117647059 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 639.35 -358.2678588235294 L 651.85 -358.2678588235294 L 645.6 -368.2678588235294 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 677.75 -367.45376470588235 L 690.25 -367.45376470588235 L 684.0 -377.45376470588235 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -296.21275647058826 L 332.15 -306.21275647058826 L 344.65 -306.21275647058826 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -296.2785778823529 L 370.55 -306.2785778823529 L 383.05 -306.2785778823529 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -296.3372143529412 L 408.95 -306.3372143529412 L 421.45 -306.3372143529412 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -296.40190211764707 L 447.35 -306.40190211764707 L 459.85 -306.40190211764707 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -296.4520621176471 L 485.75 -306.4520621176471 L 498.25 -306.4520621176471 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -296.46631811764706 L 524.15 -306.46631811764706 L 536.65 -306.46631811764706 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -296.4786277647059 L 562.55 -306.4786277647059 L 575.05 -306.4786277647059 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -296.51428070588236 L 600.95 -306.51428070588236 L 613.45 -306.51428070588236 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -296.51739952941176 L 639.35 -306.51739952941176 L 651.85 -306.51739952941176 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -296.52937011764703 L 677.75 -306.52937011764703 L 690.25 -306.52937011764703 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 307.0 -180.66666666666669 M 311.0 -180.66666666666669 L 311 -180.667 M 311 -180.667 A 4 4 0 1 0 303 -180.667 A 4 4 0 1 0 311 -180.667 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 300.75 -157.66666666666666 L 313.25 -157.66666666666666 L 307.0 -167.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 307.0 -139.66666666666666 L 300.75 -149.66666666666666 L 313.25 -149.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 1.70e-06
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 3.40e-06
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.50048673219425">
+ 5.10e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 6.80e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 8.50e-06
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -322.06561176470586 L 376.8 -344.57510588235294 L 415.2 -365.5832941176471 L 453.6 -388.23527058823527 L 492.0 -409.1637411764706 L 530.4 -432.1948941176471 L 568.8 -454.4516470588235 L 607.2 -477.41938823529415 L 645.6 -498.4314588235294 L 684.0 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -314.06561176470586 L 330.4 -330.06561176470586 L 346.4 -330.06561176470586 L 346.4 -314.06561176470586 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -322.06561176470586 M 342.4 -322.06561176470586 L 342.4 -322.066 M 342.4 -322.066 A 4 4 0 1 0 334.4 -322.066 A 4 4 0 1 0 342.4 -322.066 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -336.57510588235294 L 368.8 -352.57510588235294 L 384.8 -352.57510588235294 L 384.8 -336.57510588235294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -344.57510588235294 M 380.8 -344.57510588235294 L 380.8 -344.575 M 380.8 -344.575 A 4 4 0 1 0 372.8 -344.575 A 4 4 0 1 0 380.8 -344.575 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -357.5832941176471 L 407.2 -373.5832941176471 L 423.2 -373.5832941176471 L 423.2 -357.5832941176471 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -365.5832941176471 M 419.2 -365.5832941176471 L 419.2 -365.583 M 419.2 -365.583 A 4 4 0 1 0 411.2 -365.583 A 4 4 0 1 0 419.2 -365.583 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -380.23527058823527 L 445.6 -396.23527058823527 L 461.6 -396.23527058823527 L 461.6 -380.23527058823527 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -388.23527058823527 M 457.6 -388.23527058823527 L 457.6 -388.235 M 457.6 -388.235 A 4 4 0 1 0 449.6 -388.235 A 4 4 0 1 0 457.6 -388.235 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -401.1637411764706 L 484.0 -417.1637411764706 L 500.0 -417.1637411764706 L 500.0 -401.1637411764706 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -409.1637411764706 M 496.0 -409.1637411764706 L 496 -409.164 M 496 -409.164 A 4 4 0 1 0 488 -409.164 A 4 4 0 1 0 496 -409.164 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -424.1948941176471 L 522.4 -440.1948941176471 L 538.4 -440.1948941176471 L 538.4 -424.1948941176471 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -432.1948941176471 M 534.4 -432.1948941176471 L 534.4 -432.195 M 534.4 -432.195 A 4 4 0 1 0 526.4 -432.195 A 4 4 0 1 0 534.4 -432.195 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -446.4516470588235 L 560.8 -462.4516470588235 L 576.8 -462.4516470588235 L 576.8 -446.4516470588235 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -454.4516470588235 M 572.8 -454.4516470588235 L 572.8 -454.452 M 572.8 -454.452 A 4 4 0 1 0 564.8 -454.452 A 4 4 0 1 0 572.8 -454.452 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -469.41938823529415 L 599.2 -485.41938823529415 L 615.2 -485.41938823529415 L 615.2 -469.41938823529415 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -477.41938823529415 M 611.2 -477.41938823529415 L 611.2 -477.419 M 611.2 -477.419 A 4 4 0 1 0 603.2 -477.419 A 4 4 0 1 0 611.2 -477.419 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -490.4314588235294 L 637.6 -506.4314588235294 L 653.6 -506.4314588235294 L 653.6 -490.4314588235294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -498.4314588235294 M 649.6 -498.4314588235294 L 649.6 -498.431 M 649.6 -498.431 A 4 4 0 1 0 641.6 -498.431 A 4 4 0 1 0 649.6 -498.431 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -512.0 L 676.0 -528.0 L 692.0 -528.0 L 692.0 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -303.8908164705882 L 376.8 -307.3455670588235 L 415.2 -310.83665647058825 L 453.6 -318.0193717647059 L 492.0 -328.3473882352941 L 530.4 -337.54545882352943 L 568.8 -346.8346352941177 L 607.2 -355.7190117647059 L 645.6 -363.2678588235294 L 684.0 -372.45376470588235" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 332.15 -298.8908164705882 L 332.15 -308.8908164705882 L 344.65 -308.8908164705882 L 344.65 -298.8908164705882 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -298.8908164705882 L 344.65 -298.8908164705882 L 338.4 -308.8908164705882 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 370.55 -302.3455670588235 L 370.55 -312.3455670588235 L 383.05 -312.3455670588235 L 383.05 -302.3455670588235 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -302.3455670588235 L 383.05 -302.3455670588235 L 376.8 -312.3455670588235 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.95 -305.83665647058825 L 408.95 -315.83665647058825 L 421.45 -315.83665647058825 L 421.45 -305.83665647058825 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -305.83665647058825 L 421.45 -305.83665647058825 L 415.2 -315.83665647058825 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.35 -313.0193717647059 L 447.35 -323.0193717647059 L 459.85 -323.0193717647059 L 459.85 -313.0193717647059 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -313.0193717647059 L 459.85 -313.0193717647059 L 453.6 -323.0193717647059 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 485.75 -323.3473882352941 L 485.75 -333.34738823529415 L 498.25 -333.34738823529415 L 498.25 -323.3473882352941 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -323.3473882352941 L 498.25 -323.3473882352941 L 492.0 -333.34738823529415 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 524.15 -332.54545882352943 L 524.15 -342.54545882352943 L 536.65 -342.54545882352943 L 536.65 -332.54545882352943 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -332.54545882352943 L 536.65 -332.54545882352943 L 530.4 -342.54545882352943 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 562.55 -341.8346352941177 L 562.55 -351.8346352941177 L 575.05 -351.8346352941177 L 575.05 -341.8346352941177 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -341.8346352941177 L 575.05 -341.8346352941177 L 568.8 -351.8346352941177 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.95 -350.7190117647059 L 600.95 -360.7190117647059 L 613.45 -360.7190117647059 L 613.45 -350.7190117647059 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -350.7190117647059 L 613.45 -350.7190117647059 L 607.2 -360.7190117647059 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 639.35 -358.2678588235294 L 639.35 -368.2678588235294 L 651.85 -368.2678588235294 L 651.85 -358.2678588235294 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -358.2678588235294 L 651.85 -358.2678588235294 L 645.6 -368.2678588235294 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 677.75 -367.45376470588235 L 677.75 -377.45376470588235 L 690.25 -377.45376470588235 L 690.25 -367.45376470588235 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -367.45376470588235 L 690.25 -367.45376470588235 L 684.0 -377.45376470588235 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -301.21275647058826 L 376.8 -301.2785778823529 L 415.2 -301.3372143529412 L 453.6 -301.40190211764707 L 492.0 -301.4520621176471 L 530.4 -301.46631811764706 L 568.8 -301.4786277647059 L 607.2 -301.51428070588236 L 645.6 -301.51739952941176 L 684.0 -301.52937011764703" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -296.21275647058826 L 332.15 -306.21275647058826 L 344.65 -306.21275647058826 L 344.65 -296.21275647058826 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -296.21275647058826 L 332.15 -306.21275647058826 L 344.65 -306.21275647058826 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -296.2785778823529 L 370.55 -306.2785778823529 L 383.05 -306.2785778823529 L 383.05 -296.2785778823529 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -296.2785778823529 L 370.55 -306.2785778823529 L 383.05 -306.2785778823529 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -296.3372143529412 L 408.95 -306.3372143529412 L 421.45 -306.3372143529412 L 421.45 -296.3372143529412 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -296.3372143529412 L 408.95 -306.3372143529412 L 421.45 -306.3372143529412 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -296.40190211764707 L 447.35 -306.40190211764707 L 459.85 -306.40190211764707 L 459.85 -296.40190211764707 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -296.40190211764707 L 447.35 -306.40190211764707 L 459.85 -306.40190211764707 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -296.4520621176471 L 485.75 -306.4520621176471 L 498.25 -306.4520621176471 L 498.25 -296.4520621176471 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -296.4520621176471 L 485.75 -306.4520621176471 L 498.25 -306.4520621176471 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -296.46631811764706 L 524.15 -306.46631811764706 L 536.65 -306.46631811764706 L 536.65 -296.46631811764706 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -296.46631811764706 L 524.15 -306.46631811764706 L 536.65 -306.46631811764706 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -296.4786277647059 L 562.55 -306.4786277647059 L 575.05 -306.4786277647059 L 575.05 -296.4786277647059 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -296.4786277647059 L 562.55 -306.4786277647059 L 575.05 -306.4786277647059 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -296.51428070588236 L 600.95 -306.51428070588236 L 613.45 -306.51428070588236 L 613.45 -296.51428070588236 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -296.51428070588236 L 600.95 -306.51428070588236 L 613.45 -306.51428070588236 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -296.51739952941176 L 639.35 -306.51739952941176 L 651.85 -306.51739952941176 L 651.85 -296.51739952941176 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -296.51739952941176 L 639.35 -306.51739952941176 L 651.85 -306.51739952941176 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -296.52937011764703 L 677.75 -306.52937011764703 L 690.25 -306.52937011764703 L 690.25 -296.52937011764703 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -296.52937011764703 L 677.75 -306.52937011764703 L 690.25 -306.52937011764703 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -180.66666666666669 L 314 -180.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 299.0 -172.66666666666669 L 299.0 -188.66666666666669 L 315.0 -188.66666666666669 L 315.0 -172.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -180.66666666666669 M 311.0 -180.66666666666669 L 311 -180.667 M 311 -180.667 A 4 4 0 1 0 303 -180.667 A 4 4 0 1 0 311 -180.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-176.0">
+ n_set
+ </text>
+ <path d="M 300 -162.66666666666666 L 314 -162.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 300.75 -157.66666666666666 L 300.75 -167.66666666666666 L 313.25 -167.66666666666666 L 313.25 -157.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -157.66666666666666 L 313.25 -157.66666666666666 L 307.0 -167.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ splay_tree_ost_set
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 300.75 -139.66666666666666 L 300.75 -149.66666666666666 L 313.25 -149.66666666666666 L 313.25 -139.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -139.66666666666666 L 300.75 -149.66666666666666 L 313.25 -149.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ rb_tree_ost_set
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 436.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 338.4 -320.7875964323357 M 342.4 -320.7875964323357 L 342.4 -320.788 M 342.4 -320.788 A 4 4 0 1 0 334.4 -320.788 A 4 4 0 1 0 342.4 -320.788 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 376.8 -342.4589692036527 M 380.8 -342.4589692036527 L 380.8 -342.459 M 380.8 -342.459 A 4 4 0 1 0 372.8 -342.459 A 4 4 0 1 0 380.8 -342.459 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 415.2 -366.65452645191004 M 419.2 -366.65452645191004 L 419.2 -366.655 M 419.2 -366.655 A 4 4 0 1 0 411.2 -366.655 A 4 4 0 1 0 419.2 -366.655 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 453.6 -387.27707855415713 M 457.6 -387.27707855415713 L 457.6 -387.277 M 457.6 -387.277 A 4 4 0 1 0 449.6 -387.277 A 4 4 0 1 0 457.6 -387.277 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 492.0 -408.5794885875486 M 496.0 -408.5794885875486 L 496 -408.579 M 496 -408.579 A 4 4 0 1 0 488 -408.579 A 4 4 0 1 0 496 -408.579 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 530.4 -431.02220490155264 M 534.4 -431.02220490155264 L 534.4 -431.022 M 534.4 -431.022 A 4 4 0 1 0 526.4 -431.022 A 4 4 0 1 0 534.4 -431.022 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 568.8 -452.9573173432061 M 572.8 -452.9573173432061 L 572.8 -452.957 M 572.8 -452.957 A 4 4 0 1 0 564.8 -452.957 A 4 4 0 1 0 572.8 -452.957 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 607.2 -472.75971409085673 M 611.2 -472.75971409085673 L 611.2 -472.76 M 611.2 -472.76 A 4 4 0 1 0 603.2 -472.76 A 4 4 0 1 0 611.2 -472.76 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 645.6 -494.29049715242286 M 649.6 -494.29049715242286 L 649.6 -494.29 M 649.6 -494.29 A 4 4 0 1 0 641.6 -494.29 A 4 4 0 1 0 649.6 -494.29 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 332.15 -296.22444576317724 L 344.65 -296.22444576317724 L 338.4 -306.22444576317724 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 370.55 -297.33312666625335 L 383.05 -297.33312666625335 L 376.8 -307.33312666625335 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 408.95 -298.46445975749094 L 421.45 -298.46445975749094 L 415.2 -308.46445975749094 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 447.35 -299.84986758544943 L 459.85 -299.84986758544943 L 453.6 -309.84986758544943 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 485.75 -301.48649548727667 L 498.25 -301.48649548727667 L 492.0 -311.48649548727667 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 524.15 -302.97635669557053 L 536.65 -302.97635669557053 L 530.4 -312.97635669557053 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 562.55 -304.8998343710973 L 575.05 -304.8998343710973 L 568.8 -314.8998343710973 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 600.95 -307.1955483910968 L 613.45 -307.1955483910968 L 607.2 -317.1955483910968 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 639.35 -308.8781431848578 L 651.85 -308.8781431848578 L 645.6 -318.8781431848578 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 677.75 -310.5510925307565 L 690.25 -310.5510925307565 L 684.0 -320.5510925307565 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -296.28165593474046 L 332.15 -306.28165593474046 L 344.65 -306.28165593474046 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -297.48556371398456 L 370.55 -307.48556371398456 L 383.05 -307.48556371398456 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -298.6490190694667 L 408.95 -308.6490190694667 L 421.45 -308.6490190694667 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -300.2742672913917 L 447.35 -310.2742672913917 L 459.85 -310.2742672913917 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -301.72616050946385 L 485.75 -311.72616050946385 L 498.25 -311.72616050946385 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -303.0200632401265 L 524.15 -313.0200632401265 L 536.65 -313.0200632401265 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -304.2359547576238 L 562.55 -314.2359547576238 L 575.05 -314.2359547576238 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -305.4805098181625 L 600.95 -315.4805098181625 L 613.45 -315.4805098181625 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -306.7510783592996 L 639.35 -316.7510783592996 L 651.85 -316.7510783592996 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -308.45997891995785 L 677.75 -318.45997891995785 L 690.25 -318.45997891995785 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 307.0 -178.66666666666669 M 311.0 -178.66666666666669 L 311 -178.667 M 311 -178.667 A 4 4 0 1 0 303 -178.667 A 4 4 0 1 0 311 -178.667 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 300.75 -155.66666666666666 L 313.25 -155.66666666666666 L 307.0 -165.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 307.0 -137.66666666666666 L 300.75 -147.66666666666666 L 313.25 -147.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 4.52e-05
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 9.03e-05
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.35e-04
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.81e-04
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 2.26e-04
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -320.7875964323357 L 376.8 -342.4589692036527 L 415.2 -366.65452645191004 L 453.6 -387.27707855415713 L 492.0 -408.5794885875486 L 530.4 -431.02220490155264 L 568.8 -452.9573173432061 L 607.2 -472.75971409085673 L 645.6 -494.29049715242286 L 684.0 -520.0" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 330.4 -312.7875964323357 L 330.4 -328.7875964323357 L 346.4 -328.7875964323357 L 346.4 -312.7875964323357 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -320.7875964323357 M 342.4 -320.7875964323357 L 342.4 -320.788 M 342.4 -320.788 A 4 4 0 1 0 334.4 -320.788 A 4 4 0 1 0 342.4 -320.788 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 368.8 -334.4589692036527 L 368.8 -350.4589692036527 L 384.8 -350.4589692036527 L 384.8 -334.4589692036527 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -342.4589692036527 M 380.8 -342.4589692036527 L 380.8 -342.459 M 380.8 -342.459 A 4 4 0 1 0 372.8 -342.459 A 4 4 0 1 0 380.8 -342.459 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 407.2 -358.65452645191004 L 407.2 -374.65452645191004 L 423.2 -374.65452645191004 L 423.2 -358.65452645191004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -366.65452645191004 M 419.2 -366.65452645191004 L 419.2 -366.655 M 419.2 -366.655 A 4 4 0 1 0 411.2 -366.655 A 4 4 0 1 0 419.2 -366.655 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 445.6 -379.27707855415713 L 445.6 -395.27707855415713 L 461.6 -395.27707855415713 L 461.6 -379.27707855415713 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -387.27707855415713 M 457.6 -387.27707855415713 L 457.6 -387.277 M 457.6 -387.277 A 4 4 0 1 0 449.6 -387.277 A 4 4 0 1 0 457.6 -387.277 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 484.0 -400.5794885875486 L 484.0 -416.5794885875486 L 500.0 -416.5794885875486 L 500.0 -400.5794885875486 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -408.5794885875486 M 496.0 -408.5794885875486 L 496 -408.579 M 496 -408.579 A 4 4 0 1 0 488 -408.579 A 4 4 0 1 0 496 -408.579 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 522.4 -423.02220490155264 L 522.4 -439.02220490155264 L 538.4 -439.02220490155264 L 538.4 -423.02220490155264 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -431.02220490155264 M 534.4 -431.02220490155264 L 534.4 -431.022 M 534.4 -431.022 A 4 4 0 1 0 526.4 -431.022 A 4 4 0 1 0 534.4 -431.022 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 560.8 -444.9573173432061 L 560.8 -460.9573173432061 L 576.8 -460.9573173432061 L 576.8 -444.9573173432061 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -452.9573173432061 M 572.8 -452.9573173432061 L 572.8 -452.957 M 572.8 -452.957 A 4 4 0 1 0 564.8 -452.957 A 4 4 0 1 0 572.8 -452.957 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 599.2 -464.75971409085673 L 599.2 -480.75971409085673 L 615.2 -480.75971409085673 L 615.2 -464.75971409085673 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -472.75971409085673 M 611.2 -472.75971409085673 L 611.2 -472.76 M 611.2 -472.76 A 4 4 0 1 0 603.2 -472.76 A 4 4 0 1 0 611.2 -472.76 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 637.6 -486.29049715242286 L 637.6 -502.29049715242286 L 653.6 -502.29049715242286 L 653.6 -486.29049715242286 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -494.29049715242286 M 649.6 -494.29049715242286 L 649.6 -494.29 M 649.6 -494.29 A 4 4 0 1 0 641.6 -494.29 A 4 4 0 1 0 649.6 -494.29 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 676.0 -512.0 L 676.0 -528.0 L 692.0 -528.0 L 692.0 -512.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -520.0 M 688.0 -520.0 L 688 -520 M 688 -520 A 4 4 0 1 0 680 -520 A 4 4 0 1 0 688 -520 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -301.22444576317724 L 376.8 -302.33312666625335 L 415.2 -303.46445975749094 L 453.6 -304.84986758544943 L 492.0 -306.48649548727667 L 530.4 -307.97635669557053 L 568.8 -309.8998343710973 L 607.2 -312.1955483910968 L 645.6 -313.8781431848578 L 684.0 -315.5510925307565" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 332.15 -296.22444576317724 L 332.15 -306.22444576317724 L 344.65 -306.22444576317724 L 344.65 -296.22444576317724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -296.22444576317724 L 344.65 -296.22444576317724 L 338.4 -306.22444576317724 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 370.55 -297.33312666625335 L 370.55 -307.33312666625335 L 383.05 -307.33312666625335 L 383.05 -297.33312666625335 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -297.33312666625335 L 383.05 -297.33312666625335 L 376.8 -307.33312666625335 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 408.95 -298.46445975749094 L 408.95 -308.46445975749094 L 421.45 -308.46445975749094 L 421.45 -298.46445975749094 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -298.46445975749094 L 421.45 -298.46445975749094 L 415.2 -308.46445975749094 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 447.35 -299.84986758544943 L 447.35 -309.84986758544943 L 459.85 -309.84986758544943 L 459.85 -299.84986758544943 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -299.84986758544943 L 459.85 -299.84986758544943 L 453.6 -309.84986758544943 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 485.75 -301.48649548727667 L 485.75 -311.48649548727667 L 498.25 -311.48649548727667 L 498.25 -301.48649548727667 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -301.48649548727667 L 498.25 -301.48649548727667 L 492.0 -311.48649548727667 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 524.15 -302.97635669557053 L 524.15 -312.97635669557053 L 536.65 -312.97635669557053 L 536.65 -302.97635669557053 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -302.97635669557053 L 536.65 -302.97635669557053 L 530.4 -312.97635669557053 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 562.55 -304.8998343710973 L 562.55 -314.8998343710973 L 575.05 -314.8998343710973 L 575.05 -304.8998343710973 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -304.8998343710973 L 575.05 -304.8998343710973 L 568.8 -314.8998343710973 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 600.95 -307.1955483910968 L 600.95 -317.1955483910968 L 613.45 -317.1955483910968 L 613.45 -307.1955483910968 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -307.1955483910968 L 613.45 -307.1955483910968 L 607.2 -317.1955483910968 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 639.35 -308.8781431848578 L 639.35 -318.8781431848578 L 651.85 -318.8781431848578 L 651.85 -308.8781431848578 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -308.8781431848578 L 651.85 -308.8781431848578 L 645.6 -318.8781431848578 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 677.75 -310.5510925307565 L 677.75 -320.5510925307565 L 690.25 -320.5510925307565 L 690.25 -310.5510925307565 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -310.5510925307565 L 690.25 -310.5510925307565 L 684.0 -320.5510925307565 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -301.28165593474046 L 376.8 -302.48556371398456 L 415.2 -303.6490190694667 L 453.6 -305.2742672913917 L 492.0 -306.72616050946385 L 530.4 -308.0200632401265 L 568.8 -309.2359547576238 L 607.2 -310.4805098181625 L 645.6 -311.7510783592996 L 684.0 -313.45997891995785" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -296.28165593474046 L 332.15 -306.28165593474046 L 344.65 -306.28165593474046 L 344.65 -296.28165593474046 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -296.28165593474046 L 332.15 -306.28165593474046 L 344.65 -306.28165593474046 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -297.48556371398456 L 370.55 -307.48556371398456 L 383.05 -307.48556371398456 L 383.05 -297.48556371398456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -297.48556371398456 L 370.55 -307.48556371398456 L 383.05 -307.48556371398456 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -298.6490190694667 L 408.95 -308.6490190694667 L 421.45 -308.6490190694667 L 421.45 -298.6490190694667 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -298.6490190694667 L 408.95 -308.6490190694667 L 421.45 -308.6490190694667 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -300.2742672913917 L 447.35 -310.2742672913917 L 459.85 -310.2742672913917 L 459.85 -300.2742672913917 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -300.2742672913917 L 447.35 -310.2742672913917 L 459.85 -310.2742672913917 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -301.72616050946385 L 485.75 -311.72616050946385 L 498.25 -311.72616050946385 L 498.25 -301.72616050946385 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -301.72616050946385 L 485.75 -311.72616050946385 L 498.25 -311.72616050946385 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -303.0200632401265 L 524.15 -313.0200632401265 L 536.65 -313.0200632401265 L 536.65 -303.0200632401265 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -303.0200632401265 L 524.15 -313.0200632401265 L 536.65 -313.0200632401265 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -304.2359547576238 L 562.55 -314.2359547576238 L 575.05 -314.2359547576238 L 575.05 -304.2359547576238 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -304.2359547576238 L 562.55 -314.2359547576238 L 575.05 -314.2359547576238 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -305.4805098181625 L 600.95 -315.4805098181625 L 613.45 -315.4805098181625 L 613.45 -305.4805098181625 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -305.4805098181625 L 600.95 -315.4805098181625 L 613.45 -315.4805098181625 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -306.7510783592996 L 639.35 -316.7510783592996 L 651.85 -316.7510783592996 L 651.85 -306.7510783592996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -306.7510783592996 L 639.35 -316.7510783592996 L 651.85 -316.7510783592996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -308.45997891995785 L 677.75 -318.45997891995785 L 690.25 -318.45997891995785 L 690.25 -308.45997891995785 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -308.45997891995785 L 677.75 -318.45997891995785 L 690.25 -318.45997891995785 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip37);">
+ <path d="M 338.4 -300.6159125089679 L 376.8 -300.9717915378688 L 415.2 -301.37134885698345 L 453.6 -301.759904519809 L 492.0 -302.145303490607 L 530.4 -302.5477817241349 L 568.8 -302.97718926866423 L 607.2 -303.2889320921499 L 645.6 -303.6866460590064 L 684.0 -304.115917203263" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip38);">
+ <path d="M 333.4 -295.6159125089679 L 343.4 -305.6159125089679" style="stroke-width:1;"/>
+ <path d="M 343.4 -295.6159125089679 L 333.4 -305.6159125089679" style="stroke-width:1;"/>
+ <path d="M 338.4 -293.5459125089679 L 338.4 -307.6859125089679" style="stroke-width:1;"/>
+ <path d="M 331.33 -300.6159125089679 L 345.47 -300.6159125089679" style="stroke-width:1;"/>
+ <path d="M 371.8 -295.9717915378688 L 381.8 -305.9717915378688" style="stroke-width:1;"/>
+ <path d="M 381.8 -295.9717915378688 L 371.8 -305.9717915378688" style="stroke-width:1;"/>
+ <path d="M 376.8 -293.9017915378688 L 376.8 -308.0417915378688" style="stroke-width:1;"/>
+ <path d="M 369.73 -300.9717915378688 L 383.87 -300.9717915378688" style="stroke-width:1;"/>
+ <path d="M 410.2 -296.37134885698345 L 420.2 -306.37134885698345" style="stroke-width:1;"/>
+ <path d="M 420.2 -296.37134885698345 L 410.2 -306.37134885698345" style="stroke-width:1;"/>
+ <path d="M 415.2 -294.30134885698345 L 415.2 -308.44134885698344" style="stroke-width:1;"/>
+ <path d="M 408.13 -301.37134885698345 L 422.27 -301.37134885698345" style="stroke-width:1;"/>
+ <path d="M 448.6 -296.759904519809 L 458.6 -306.759904519809" style="stroke-width:1;"/>
+ <path d="M 458.6 -296.759904519809 L 448.6 -306.759904519809" style="stroke-width:1;"/>
+ <path d="M 453.6 -294.68990451980903 L 453.6 -308.829904519809" style="stroke-width:1;"/>
+ <path d="M 446.53 -301.759904519809 L 460.66999999999996 -301.759904519809" style="stroke-width:1;"/>
+ <path d="M 487.0 -297.145303490607 L 497.0 -307.145303490607" style="stroke-width:1;"/>
+ <path d="M 497.0 -297.145303490607 L 487.0 -307.145303490607" style="stroke-width:1;"/>
+ <path d="M 492.0 -295.075303490607 L 492.0 -309.21530349060697" style="stroke-width:1;"/>
+ <path d="M 484.93 -302.145303490607 L 499.07 -302.145303490607" style="stroke-width:1;"/>
+ <path d="M 525.4 -297.5477817241349 L 535.4 -307.5477817241349" style="stroke-width:1;"/>
+ <path d="M 535.4 -297.5477817241349 L 525.4 -307.5477817241349" style="stroke-width:1;"/>
+ <path d="M 530.4 -295.4777817241349 L 530.4 -309.6177817241349" style="stroke-width:1;"/>
+ <path d="M 523.33 -302.5477817241349 L 537.47 -302.5477817241349" style="stroke-width:1;"/>
+ <path d="M 563.8 -297.97718926866423 L 573.8 -307.97718926866423" style="stroke-width:1;"/>
+ <path d="M 573.8 -297.97718926866423 L 563.8 -307.97718926866423" style="stroke-width:1;"/>
+ <path d="M 568.8 -295.90718926866424 L 568.8 -310.0471892686642" style="stroke-width:1;"/>
+ <path d="M 561.73 -302.97718926866423 L 575.87 -302.97718926866423" style="stroke-width:1;"/>
+ <path d="M 602.2 -298.2889320921499 L 612.2 -308.2889320921499" style="stroke-width:1;"/>
+ <path d="M 612.2 -298.2889320921499 L 602.2 -308.2889320921499" style="stroke-width:1;"/>
+ <path d="M 607.2 -296.2189320921499 L 607.2 -310.35893209214987" style="stroke-width:1;"/>
+ <path d="M 600.13 -303.2889320921499 L 614.27 -303.2889320921499" style="stroke-width:1;"/>
+ <path d="M 640.6 -298.6866460590064 L 650.6 -308.6866460590064" style="stroke-width:1;"/>
+ <path d="M 650.6 -298.6866460590064 L 640.6 -308.6866460590064" style="stroke-width:1;"/>
+ <path d="M 645.6 -296.6166460590064 L 645.6 -310.7566460590064" style="stroke-width:1;"/>
+ <path d="M 638.53 -303.6866460590064 L 652.6700000000001 -303.6866460590064" style="stroke-width:1;"/>
+ <path d="M 679.0 -299.115917203263 L 689.0 -309.115917203263" style="stroke-width:1;"/>
+ <path d="M 689.0 -299.115917203263 L 679.0 -309.115917203263" style="stroke-width:1;"/>
+ <path d="M 684.0 -297.045917203263 L 684.0 -311.185917203263" style="stroke-width:1;"/>
+ <path d="M 676.9300000000001 -304.115917203263 L 691.0699999999999 -304.115917203263" style="stroke-width:1;"/>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -178.66666666666669 L 314 -178.66666666666669" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 299.0 -170.66666666666669 L 299.0 -186.66666666666669 L 315.0 -186.66666666666669 L 315.0 -170.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -178.66666666666669 M 311.0 -178.66666666666669 L 311 -178.667 M 311 -178.667 A 4 4 0 1 0 303 -178.667 A 4 4 0 1 0 311 -178.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-174.0">
+ n_set
+ </text>
+ <path d="M 300 -160.66666666666666 L 314 -160.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 300.75 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 L 313.25 -155.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -155.66666666666666 L 313.25 -155.66666666666666 L 307.0 -165.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-156.0">
+ splay_tree_set
+ </text>
+ <path d="M 300 -142.66666666666666 L 314 -142.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 300.75 -137.66666666666666 L 300.75 -147.66666666666666 L 313.25 -147.66666666666666 L 313.25 -137.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -137.66666666666666 L 300.75 -147.66666666666666 L 313.25 -147.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-138.0">
+ rb_tree_set
+ </text>
+ <path d="M 300 -124.66666666666666 L 314 -124.66666666666666" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 302.0 -119.66666666666666 L 312.0 -129.66666666666666" style="stroke-width:1;"/>
+ <path d="M 312.0 -119.66666666666666 L 302.0 -129.66666666666666" style="stroke-width:1;"/>
+ <path d="M 307.0 -117.59666666666666 L 307.0 -131.73666666666665" style="stroke-width:1;"/>
+ <path d="M 299.93 -124.66666666666666 L 314.07 -124.66666666666666" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-120.0">
+ ov_tree_set
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 416.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 332.15 -455.275456 L 344.65 -455.275456 L 338.4 -465.275456 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 370.55 -477.85695999999996 L 383.05 -477.85695999999996 L 376.8 -487.85695999999996 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 408.95 -485.217984 L 421.45 -485.217984 L 415.2 -495.217984 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 447.35 -495.89344 L 459.85 -495.89344 L 453.6 -505.89344 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 485.75 -495.32179199999996 L 498.25 -495.32179199999996 L 492.0 -505.32179199999996 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 524.15 -500.56968959999995 L 536.65 -500.56968959999995 L 530.4 -510.56968959999995 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 562.55 -504.6759808 L 575.05 -504.6759808 L 568.8 -514.6759807999999 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 600.95 -510.63970559999996 L 613.45 -510.63970559999996 L 607.2 -520.6397056 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 639.35 -510.5456512 L 651.85 -510.5456512 L 645.6 -520.5456512000001 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 677.75 -515.0 L 690.25 -515.0 L 684.0 -525.0 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 338.4 -440.0447488 M 342.4 -440.0447488 L 342.4 -440.045 M 342.4 -440.045 A 4 4 0 1 0 334.4 -440.045 A 4 4 0 1 0 342.4 -440.045 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 376.8 -449.37472 M 380.8 -449.37472 L 380.8 -449.375 M 380.8 -449.375 A 4 4 0 1 0 372.8 -449.375 A 4 4 0 1 0 380.8 -449.375 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 415.2 -452.5714432 M 419.2 -452.5714432 L 419.2 -452.571 M 419.2 -452.571 A 4 4 0 1 0 411.2 -452.571 A 4 4 0 1 0 419.2 -452.571 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 453.6 -455.58005760000003 M 457.6 -455.58005760000003 L 457.6 -455.58 M 457.6 -455.58 A 4 4 0 1 0 449.6 -455.58 A 4 4 0 1 0 457.6 -455.58 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 492.0 -458.12797439999997 M 496.0 -458.12797439999997 L 496 -458.128 M 496 -458.128 A 4 4 0 1 0 488 -458.128 A 4 4 0 1 0 496 -458.128 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 530.4 -456.4445696 M 534.4 -456.4445696 L 534.4 -456.445 M 534.4 -456.445 A 4 4 0 1 0 526.4 -456.445 A 4 4 0 1 0 534.4 -456.445 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 568.8 -461.2571136 M 572.8 -461.2571136 L 572.8 -461.257 M 572.8 -461.257 A 4 4 0 1 0 564.8 -461.257 A 4 4 0 1 0 572.8 -461.257 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 607.2 -464.26685439999994 M 611.2 -464.26685439999994 L 611.2 -464.267 M 611.2 -464.267 A 4 4 0 1 0 603.2 -464.267 A 4 4 0 1 0 611.2 -464.267 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 645.6 -466.06402560000004 M 649.6 -466.06402560000004 L 649.6 -466.064 M 649.6 -466.064 A 4 4 0 1 0 641.6 -466.064 A 4 4 0 1 0 649.6 -466.064 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 684.0 -470.2700032 M 688.0 -470.2700032 L 688 -470.27 M 688 -470.27 A 4 4 0 1 0 680 -470.27 A 4 4 0 1 0 688 -470.27 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 338.4 -418.2630784 L 332.15 -428.2630784 L 344.65 -428.2630784 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 376.8 -424.9741696 L 370.55 -434.9741696 L 383.05 -434.9741696 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 415.2 -431.91391999999996 L 408.95 -441.91391999999996 L 421.45 -441.91391999999996 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 453.6 -432.50021119999997 L 447.35 -442.50021119999997 L 459.85 -442.50021119999997 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 492.0 -434.94675199999995 L 485.75 -444.94675199999995 L 498.25 -444.94675199999995 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 530.4 -436.8605056 L 524.15 -446.8605056 L 536.65 -446.8605056 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 568.8 -437.3279616 L 562.55 -447.3279616 L 575.05 -447.3279616 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 607.2 -440.6891392 L 600.95 -450.6891392 L 613.45 -450.6891392 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 645.6 -441.22530559999996 L 639.35 -451.22530559999996 L 651.85 -451.22530559999996 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 684.0 -445.9606912 L 677.75 -455.9606912 L 690.25 -455.9606912 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 300.75 -175.66666666666669 L 313.25 -175.66666666666669 L 307.0 -185.66666666666669 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 307.0 -139.66666666666666 L 300.75 -149.66666666666666 L 313.25 -149.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 7.81e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.56e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.34e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.13e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 3.91e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -460.275456 L 376.8 -482.85695999999996 L 415.2 -490.217984 L 453.6 -500.89344 L 492.0 -500.32179199999996 L 530.4 -505.56968959999995 L 568.8 -509.6759808 L 607.2 -515.6397056 L 645.6 -515.5456512000001 L 684.0 -520.0" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip3);">
+ <path d="M 332.15 -455.275456 L 332.15 -465.275456 L 344.65 -465.275456 L 344.65 -455.275456 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -455.275456 L 344.65 -455.275456 L 338.4 -465.275456 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip4);">
+ <path d="M 370.55 -477.85695999999996 L 370.55 -487.85695999999996 L 383.05 -487.85695999999996 L 383.05 -477.85695999999996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -477.85695999999996 L 383.05 -477.85695999999996 L 376.8 -487.85695999999996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 408.95 -485.217984 L 408.95 -495.217984 L 421.45 -495.217984 L 421.45 -485.217984 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -485.217984 L 421.45 -485.217984 L 415.2 -495.217984 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 447.35 -495.89344 L 447.35 -505.89344 L 459.85 -505.89344 L 459.85 -495.89344 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -495.89344 L 459.85 -495.89344 L 453.6 -505.89344 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 485.75 -495.32179199999996 L 485.75 -505.32179199999996 L 498.25 -505.32179199999996 L 498.25 -495.32179199999996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -495.32179199999996 L 498.25 -495.32179199999996 L 492.0 -505.32179199999996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 524.15 -500.56968959999995 L 524.15 -510.56968959999995 L 536.65 -510.56968959999995 L 536.65 -500.56968959999995 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -500.56968959999995 L 536.65 -500.56968959999995 L 530.4 -510.56968959999995 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 562.55 -504.6759808 L 562.55 -514.6759807999999 L 575.05 -514.6759807999999 L 575.05 -504.6759808 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -504.6759808 L 575.05 -504.6759808 L 568.8 -514.6759807999999 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 600.95 -510.63970559999996 L 600.95 -520.6397056 L 613.45 -520.6397056 L 613.45 -510.63970559999996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -510.63970559999996 L 613.45 -510.63970559999996 L 607.2 -520.6397056 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 639.35 -510.5456512 L 639.35 -520.5456512000001 L 651.85 -520.5456512000001 L 651.85 -510.5456512 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -510.5456512 L 651.85 -510.5456512 L 645.6 -520.5456512000001 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 677.75 -515.0 L 677.75 -525.0 L 690.25 -525.0 L 690.25 -515.0 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -515.0 L 690.25 -515.0 L 684.0 -525.0 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip13);">
+ <path d="M 338.4 -440.0447488 L 376.8 -449.37472 L 415.2 -452.5714432 L 453.6 -455.58005760000003 L 492.0 -458.12797439999997 L 530.4 -456.4445696 L 568.8 -461.2571136 L 607.2 -464.26685439999994 L 645.6 -466.06402560000004 L 684.0 -470.2700032" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip14);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 330.4 -432.0447488 L 330.4 -448.0447488 L 346.4 -448.0447488 L 346.4 -432.0447488 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -440.0447488 M 342.4 -440.0447488 L 342.4 -440.045 M 342.4 -440.045 A 4 4 0 1 0 334.4 -440.045 A 4 4 0 1 0 342.4 -440.045 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 368.8 -441.37472 L 368.8 -457.37472 L 384.8 -457.37472 L 384.8 -441.37472 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -449.37472 M 380.8 -449.37472 L 380.8 -449.375 M 380.8 -449.375 A 4 4 0 1 0 372.8 -449.375 A 4 4 0 1 0 380.8 -449.375 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 407.2 -444.5714432 L 407.2 -460.5714432 L 423.2 -460.5714432 L 423.2 -444.5714432 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -452.5714432 M 419.2 -452.5714432 L 419.2 -452.571 M 419.2 -452.571 A 4 4 0 1 0 411.2 -452.571 A 4 4 0 1 0 419.2 -452.571 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 445.6 -447.58005760000003 L 445.6 -463.58005760000003 L 461.6 -463.58005760000003 L 461.6 -447.58005760000003 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -455.58005760000003 M 457.6 -455.58005760000003 L 457.6 -455.58 M 457.6 -455.58 A 4 4 0 1 0 449.6 -455.58 A 4 4 0 1 0 457.6 -455.58 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 484.0 -450.12797439999997 L 484.0 -466.12797439999997 L 500.0 -466.12797439999997 L 500.0 -450.12797439999997 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -458.12797439999997 M 496.0 -458.12797439999997 L 496 -458.128 M 496 -458.128 A 4 4 0 1 0 488 -458.128 A 4 4 0 1 0 496 -458.128 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 522.4 -448.4445696 L 522.4 -464.4445696 L 538.4 -464.4445696 L 538.4 -448.4445696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -456.4445696 M 534.4 -456.4445696 L 534.4 -456.445 M 534.4 -456.445 A 4 4 0 1 0 526.4 -456.445 A 4 4 0 1 0 534.4 -456.445 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 560.8 -453.2571136 L 560.8 -469.2571136 L 576.8 -469.2571136 L 576.8 -453.2571136 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -461.2571136 M 572.8 -461.2571136 L 572.8 -461.257 M 572.8 -461.257 A 4 4 0 1 0 564.8 -461.257 A 4 4 0 1 0 572.8 -461.257 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 599.2 -456.26685439999994 L 599.2 -472.26685439999994 L 615.2 -472.26685439999994 L 615.2 -456.26685439999994 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -464.26685439999994 M 611.2 -464.26685439999994 L 611.2 -464.267 M 611.2 -464.267 A 4 4 0 1 0 603.2 -464.267 A 4 4 0 1 0 611.2 -464.267 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 637.6 -458.06402560000004 L 637.6 -474.06402560000004 L 653.6 -474.06402560000004 L 653.6 -458.06402560000004 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -466.06402560000004 M 649.6 -466.06402560000004 L 649.6 -466.064 M 649.6 -466.064 A 4 4 0 1 0 641.6 -466.064 A 4 4 0 1 0 649.6 -466.064 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 676.0 -462.2700032 L 676.0 -478.2700032 L 692.0 -478.2700032 L 692.0 -462.2700032 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -470.2700032 M 688.0 -470.2700032 L 688 -470.27 M 688 -470.27 A 4 4 0 1 0 680 -470.27 A 4 4 0 1 0 688 -470.27 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip25);">
+ <path d="M 338.4 -423.2630784 L 376.8 -429.9741696 L 415.2 -436.91391999999996 L 453.6 -437.50021119999997 L 492.0 -439.94675199999995 L 530.4 -441.8605056 L 568.8 -442.3279616 L 607.2 -445.6891392 L 645.6 -446.22530559999996 L 684.0 -450.9606912" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip26);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip27);">
+ <path d="M 332.15 -418.2630784 L 332.15 -428.2630784 L 344.65 -428.2630784 L 344.65 -418.2630784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -418.2630784 L 332.15 -428.2630784 L 344.65 -428.2630784 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip28);">
+ <path d="M 370.55 -424.9741696 L 370.55 -434.9741696 L 383.05 -434.9741696 L 383.05 -424.9741696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -424.9741696 L 370.55 -434.9741696 L 383.05 -434.9741696 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 408.95 -431.91391999999996 L 408.95 -441.91391999999996 L 421.45 -441.91391999999996 L 421.45 -431.91391999999996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -431.91391999999996 L 408.95 -441.91391999999996 L 421.45 -441.91391999999996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 447.35 -432.50021119999997 L 447.35 -442.50021119999997 L 459.85 -442.50021119999997 L 459.85 -432.50021119999997 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -432.50021119999997 L 447.35 -442.50021119999997 L 459.85 -442.50021119999997 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 485.75 -434.94675199999995 L 485.75 -444.94675199999995 L 498.25 -444.94675199999995 L 498.25 -434.94675199999995 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -434.94675199999995 L 485.75 -444.94675199999995 L 498.25 -444.94675199999995 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 524.15 -436.8605056 L 524.15 -446.8605056 L 536.65 -446.8605056 L 536.65 -436.8605056 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -436.8605056 L 524.15 -446.8605056 L 536.65 -446.8605056 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 562.55 -437.3279616 L 562.55 -447.3279616 L 575.05 -447.3279616 L 575.05 -437.3279616 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -437.3279616 L 562.55 -447.3279616 L 575.05 -447.3279616 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 600.95 -440.6891392 L 600.95 -450.6891392 L 613.45 -450.6891392 L 613.45 -440.6891392 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -440.6891392 L 600.95 -450.6891392 L 613.45 -450.6891392 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 639.35 -441.22530559999996 L 639.35 -451.22530559999996 L 651.85 -451.22530559999996 L 651.85 -441.22530559999996 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -441.22530559999996 L 639.35 -451.22530559999996 L 651.85 -451.22530559999996 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 677.75 -445.9606912 L 677.75 -455.9606912 L 690.25 -455.9606912 L 690.25 -445.9606912 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -445.9606912 L 677.75 -455.9606912 L 690.25 -455.9606912 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 290 -134 L 290 -190 L 324 -190 L 324 -134 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -180.66666666666669 L 314 -180.66666666666669" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 300.75 -175.66666666666669 L 300.75 -185.66666666666669 L 313.25 -185.66666666666669 L 313.25 -175.66666666666669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -175.66666666666669 L 313.25 -175.66666666666669 L 307.0 -185.66666666666669 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-176.0">
+ splay_tree_map
+ </text>
+ <path d="M 300 -162.66666666666666 L 314 -162.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 299.0 -154.66666666666666 L 299.0 -170.66666666666666 L 315.0 -170.66666666666666 L 315.0 -154.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -162.66666666666666 M 311.0 -162.66666666666666 L 311 -162.667 M 311 -162.667 A 4 4 0 1 0 303 -162.667 A 4 4 0 1 0 311 -162.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-158.0">
+ n_map
+ </text>
+ <path d="M 300 -144.66666666666666 L 314 -144.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 300.75 -139.66666666666666 L 300.75 -149.66666666666666 L 313.25 -149.66666666666666 L 313.25 -139.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -139.66666666666666 L 300.75 -149.66666666666666 L 313.25 -149.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-140.0">
+ rb_tree_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 396.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 338.4 -431.4694883971315 M 342.4 -431.4694883971315 L 342.4 -431.469 M 342.4 -431.469 A 4 4 0 1 0 334.4 -431.469 A 4 4 0 1 0 342.4 -431.469 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 376.8 -440.228164112818 M 380.8 -440.228164112818 L 380.8 -440.228 M 380.8 -440.228 A 4 4 0 1 0 372.8 -440.228 A 4 4 0 1 0 380.8 -440.228 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 415.2 -443.2291446369177 M 419.2 -443.2291446369177 L 419.2 -443.229 M 419.2 -443.229 A 4 4 0 1 0 411.2 -443.229 A 4 4 0 1 0 419.2 -443.229 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 453.6 -446.0535346932498 M 457.6 -446.0535346932498 L 457.6 -446.054 M 457.6 -446.054 A 4 4 0 1 0 449.6 -446.054 A 4 4 0 1 0 457.6 -446.054 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 492.0 -448.44543671774363 M 496.0 -448.44543671774363 L 496 -448.445 M 496 -448.445 A 4 4 0 1 0 488 -448.445 A 4 4 0 1 0 496 -448.445 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 530.4 -446.8651106454156 M 534.4 -446.8651106454156 L 534.4 -446.865 M 534.4 -446.865 A 4 4 0 1 0 526.4 -446.865 A 4 4 0 1 0 534.4 -446.865 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 568.8 -451.3829715648011 M 572.8 -451.3829715648011 L 572.8 -451.383 M 572.8 -451.383 A 4 4 0 1 0 564.8 -451.383 A 4 4 0 1 0 572.8 -451.383 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 607.2 -454.2084190490839 M 611.2 -454.2084190490839 L 611.2 -454.208 M 611.2 -454.208 A 4 4 0 1 0 603.2 -454.208 A 4 4 0 1 0 611.2 -454.208 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 645.6 -455.8955453444331 M 649.6 -455.8955453444331 L 649.6 -455.896 M 649.6 -455.896 A 4 4 0 1 0 641.6 -455.896 A 4 4 0 1 0 649.6 -455.896 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 684.0 -459.84398131236424 M 688.0 -459.84398131236424 L 688 -459.844 M 688 -459.844 A 4 4 0 1 0 680 -459.844 A 4 4 0 1 0 688 -459.844 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 307.0 -164.66666666666666 M 311.0 -164.66666666666666 L 311 -164.667 M 311 -164.667 A 4 4 0 1 0 303 -164.667 A 4 4 0 1 0 311 -164.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.5004867321942">
+ 8.32e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 1.66e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 2.50e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 3.33e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 4.16e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -519.7980312614154 L 376.8 -501.0503624093977 L 415.2 -491.98344644608073 L 453.6 -488.5922750081711 L 492.0 -502.6465499009863 L 530.4 -520.0 L 568.8 -478.2474573664276 L 607.2 -472.23280718281967 L 645.6 -480.4960779036011 L 684.0 -489.1336781189318" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 331.25714285714287 -519.7980312614154 L 345.54285714285714 -519.7980312614154" style="stroke-width:1;"/>
+ <path d="M 338.4 -512.6551741185583 L 338.4 -526.9408884042725" style="stroke-width:1;"/>
+ <path d="M 369.65714285714284 -501.0503624093977 L 383.9428571428571 -501.0503624093977" style="stroke-width:1;"/>
+ <path d="M 376.8 -493.9075052665405 L 376.8 -508.19321955225485" style="stroke-width:1;"/>
+ <path d="M 408.0571428571429 -491.98344644608073 L 422.34285714285716 -491.98344644608073" style="stroke-width:1;"/>
+ <path d="M 415.2 -484.8405893032236 L 415.2 -499.1263035889379" style="stroke-width:1;"/>
+ <path d="M 446.45714285714286 -488.5922750081711 L 460.74285714285713 -488.5922750081711" style="stroke-width:1;"/>
+ <path d="M 453.6 -481.44941786531393 L 453.6 -495.7351321510282" style="stroke-width:1;"/>
+ <path d="M 484.8571428571429 -502.6465499009863 L 499.1428571428571 -502.6465499009863" style="stroke-width:1;"/>
+ <path d="M 492.0 -495.5036927581292 L 492.0 -509.7894070438434" style="stroke-width:1;"/>
+ <path d="M 523.2571428571429 -520.0 L 537.5428571428572 -520.0" style="stroke-width:1;"/>
+ <path d="M 530.4 -512.8571428571429 L 530.4 -527.1428571428571" style="stroke-width:1;"/>
+ <path d="M 561.6571428571428 -478.2474573664276 L 575.9428571428572 -478.2474573664276" style="stroke-width:1;"/>
+ <path d="M 568.8 -471.1046002235705 L 568.8 -485.3903145092848" style="stroke-width:1;"/>
+ <path d="M 600.0571428571428 -472.23280718281967 L 614.3428571428572 -472.23280718281967" style="stroke-width:1;"/>
+ <path d="M 607.2 -465.08995003996256 L 607.2 -479.37566432567684" style="stroke-width:1;"/>
+ <path d="M 638.4571428571428 -480.4960779036011 L 652.7428571428572 -480.4960779036011" style="stroke-width:1;"/>
+ <path d="M 645.6 -473.3532207607439 L 645.6 -487.6389350464582" style="stroke-width:1;"/>
+ <path d="M 676.8571428571429 -489.1336781189318 L 691.1428571428571 -489.1336781189318" style="stroke-width:1;"/>
+ <path d="M 684.0 -481.9908209760747 L 684.0 -496.276535261789" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 338.4 -431.4694883971315 L 376.8 -440.228164112818 L 415.2 -443.2291446369177 L 453.6 -446.0535346932498 L 492.0 -448.44543671774363 L 530.4 -446.8651106454156 L 568.8 -451.3829715648011 L 607.2 -454.2084190490839 L 645.6 -455.8955453444331 L 684.0 -459.84398131236424" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 330.4 -423.4694883971315 L 330.4 -439.4694883971315 L 346.4 -439.4694883971315 L 346.4 -423.4694883971315 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -431.4694883971315 M 342.4 -431.4694883971315 L 342.4 -431.469 M 342.4 -431.469 A 4 4 0 1 0 334.4 -431.469 A 4 4 0 1 0 342.4 -431.469 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 368.8 -432.228164112818 L 368.8 -448.228164112818 L 384.8 -448.228164112818 L 384.8 -432.228164112818 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -440.228164112818 M 380.8 -440.228164112818 L 380.8 -440.228 M 380.8 -440.228 A 4 4 0 1 0 372.8 -440.228 A 4 4 0 1 0 380.8 -440.228 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 407.2 -435.2291446369177 L 407.2 -451.2291446369177 L 423.2 -451.2291446369177 L 423.2 -435.2291446369177 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -443.2291446369177 M 419.2 -443.2291446369177 L 419.2 -443.229 M 419.2 -443.229 A 4 4 0 1 0 411.2 -443.229 A 4 4 0 1 0 419.2 -443.229 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 445.6 -438.0535346932498 L 445.6 -454.0535346932498 L 461.6 -454.0535346932498 L 461.6 -438.0535346932498 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -446.0535346932498 M 457.6 -446.0535346932498 L 457.6 -446.054 M 457.6 -446.054 A 4 4 0 1 0 449.6 -446.054 A 4 4 0 1 0 457.6 -446.054 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 484.0 -440.44543671774363 L 484.0 -456.44543671774363 L 500.0 -456.44543671774363 L 500.0 -440.44543671774363 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -448.44543671774363 M 496.0 -448.44543671774363 L 496 -448.445 M 496 -448.445 A 4 4 0 1 0 488 -448.445 A 4 4 0 1 0 496 -448.445 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 522.4 -438.8651106454156 L 522.4 -454.8651106454156 L 538.4 -454.8651106454156 L 538.4 -438.8651106454156 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -446.8651106454156 M 534.4 -446.8651106454156 L 534.4 -446.865 M 534.4 -446.865 A 4 4 0 1 0 526.4 -446.865 A 4 4 0 1 0 534.4 -446.865 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 560.8 -443.3829715648011 L 560.8 -459.3829715648011 L 576.8 -459.3829715648011 L 576.8 -443.3829715648011 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -451.3829715648011 M 572.8 -451.3829715648011 L 572.8 -451.383 M 572.8 -451.383 A 4 4 0 1 0 564.8 -451.383 A 4 4 0 1 0 572.8 -451.383 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 599.2 -446.2084190490839 L 599.2 -462.2084190490839 L 615.2 -462.2084190490839 L 615.2 -446.2084190490839 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -454.2084190490839 M 611.2 -454.2084190490839 L 611.2 -454.208 M 611.2 -454.208 A 4 4 0 1 0 603.2 -454.208 A 4 4 0 1 0 611.2 -454.208 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 637.6 -447.8955453444331 L 637.6 -463.8955453444331 L 653.6 -463.8955453444331 L 653.6 -447.8955453444331 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -455.8955453444331 M 649.6 -455.8955453444331 L 649.6 -455.896 M 649.6 -455.896 A 4 4 0 1 0 641.6 -455.896 A 4 4 0 1 0 649.6 -455.896 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 676.0 -451.84398131236424 L 676.0 -467.84398131236424 L 692.0 -467.84398131236424 L 692.0 -451.84398131236424 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -459.84398131236424 M 688.0 -459.84398131236424 L 688 -459.844 M 688 -459.844 A 4 4 0 1 0 680 -459.844 A 4 4 0 1 0 688 -459.844 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -182.66666666666669 L 314 -182.66666666666669" style="stroke:rgb(137,42,226);stroke-width:2;"/>
+ <path d="M 299.85714285714283 -182.66666666666669 L 314.14285714285717 -182.66666666666669" style="stroke-width:1;"/>
+ <path d="M 307.0 -175.52380952380952 L 307.0 -189.8095238095238" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-178.0">
+ pat_trie_map
+ </text>
+ <path d="M 300 -164.66666666666666 L 314 -164.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 299.0 -156.66666666666666 L 299.0 -172.66666666666666 L 315.0 -172.66666666666666 L 315.0 -156.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -164.66666666666666 M 311.0 -164.66666666666666 L 311 -164.667 M 311 -164.667 A 4 4 0 1 0 303 -164.667 A 4 4 0 1 0 311 -164.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-160.0">
+ n_map
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 396.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 338.4 -324.1345145080669 M 342.4 -324.1345145080669 L 342.4 -324.135 M 342.4 -324.135 A 4 4 0 1 0 334.4 -324.135 A 4 4 0 1 0 342.4 -324.135 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 376.8 -325.74238861413437 M 380.8 -325.74238861413437 L 380.8 -325.742 M 380.8 -325.742 A 4 4 0 1 0 372.8 -325.742 A 4 4 0 1 0 380.8 -325.742 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 415.2 -326.29329368633285 M 419.2 -326.29329368633285 L 419.2 -326.293 M 419.2 -326.293 A 4 4 0 1 0 411.2 -326.293 A 4 4 0 1 0 419.2 -326.293 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 453.6 -326.81178115914537 M 457.6 -326.81178115914537 L 457.6 -326.812 M 457.6 -326.812 A 4 4 0 1 0 449.6 -326.812 A 4 4 0 1 0 457.6 -326.812 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 492.0 -327.2508746310667 M 496.0 -327.2508746310667 L 496 -327.251 M 496 -327.251 A 4 4 0 1 0 488 -327.251 A 4 4 0 1 0 496 -327.251 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 530.4 -326.9607662341673 M 534.4 -326.9607662341673 L 534.4 -326.961 M 534.4 -326.961 A 4 4 0 1 0 526.4 -326.961 A 4 4 0 1 0 534.4 -326.961 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 568.8 -327.7901326615696 M 572.8 -327.7901326615696 L 572.8 -327.79 M 572.8 -327.79 A 4 4 0 1 0 564.8 -327.79 A 4 4 0 1 0 572.8 -327.79 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 607.2 -328.30881425174374 M 611.2 -328.30881425174374 L 611.2 -328.309 M 611.2 -328.309 A 4 4 0 1 0 603.2 -328.309 A 4 4 0 1 0 611.2 -328.309 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 645.6 -328.61852850216394 M 649.6 -328.61852850216394 L 649.6 -328.619 M 649.6 -328.619 A 4 4 0 1 0 641.6 -328.619 A 4 4 0 1 0 649.6 -328.619 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 684.0 -329.34336273034893 M 688.0 -329.34336273034893 L 688 -329.343 M 688 -329.343 A 4 4 0 1 0 680 -329.343 A 4 4 0 1 0 688 -329.343 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 307.0 -164.66666666666666 M 311.0 -164.66666666666666 L 311 -164.667 M 311 -164.667 A 4 4 0 1 0 303 -164.667 A 4 4 0 1 0 311 -164.667 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 4.53e-07
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.5004867321942">
+ 9.07e-07
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.36e-06
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.5004867321942">
+ 1.81e-06
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 2.27e-06
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -377.0307190724719 L 376.8 -393.70365337698036 L 415.2 -413.55865653138744 L 453.6 -436.4082111643953 L 492.0 -454.96777210621747 L 530.4 -469.36836857592857 L 568.8 -476.60700498969857 L 607.2 -488.72478128708633 L 645.6 -500.8842928172164 L 684.0 -520.0" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 333.4 -372.0307190724719 L 343.4 -382.0307190724719" style="stroke-width:1;"/>
+ <path d="M 343.4 -372.0307190724719 L 333.4 -382.0307190724719" style="stroke-width:1;"/>
+ <path d="M 338.4 -369.960719072472 L 338.4 -384.100719072472" style="stroke-width:1;"/>
+ <path d="M 331.33 -377.0307190724719 L 345.47 -377.0307190724719" style="stroke-width:1;"/>
+ <path d="M 371.8 -388.70365337698036 L 381.8 -398.70365337698036" style="stroke-width:1;"/>
+ <path d="M 381.8 -388.70365337698036 L 371.8 -398.70365337698036" style="stroke-width:1;"/>
+ <path d="M 376.8 -386.6336533769803 L 376.8 -400.7736533769803" style="stroke-width:1;"/>
+ <path d="M 369.73 -393.70365337698036 L 383.87 -393.70365337698036" style="stroke-width:1;"/>
+ <path d="M 410.2 -408.55865653138744 L 420.2 -418.55865653138744" style="stroke-width:1;"/>
+ <path d="M 420.2 -408.55865653138744 L 410.2 -418.55865653138744" style="stroke-width:1;"/>
+ <path d="M 415.2 -406.4886565313875 L 415.2 -420.6286565313875" style="stroke-width:1;"/>
+ <path d="M 408.13 -413.55865653138744 L 422.27 -413.55865653138744" style="stroke-width:1;"/>
+ <path d="M 448.6 -431.4082111643953 L 458.6 -441.4082111643953" style="stroke-width:1;"/>
+ <path d="M 458.6 -431.4082111643953 L 448.6 -441.4082111643953" style="stroke-width:1;"/>
+ <path d="M 453.6 -429.3382111643954 L 453.6 -443.47821116439536" style="stroke-width:1;"/>
+ <path d="M 446.53 -436.4082111643953 L 460.66999999999996 -436.4082111643953" style="stroke-width:1;"/>
+ <path d="M 487.0 -449.96777210621747 L 497.0 -459.96777210621747" style="stroke-width:1;"/>
+ <path d="M 497.0 -449.96777210621747 L 487.0 -459.96777210621747" style="stroke-width:1;"/>
+ <path d="M 492.0 -447.89777210621753 L 492.0 -462.0377721062175" style="stroke-width:1;"/>
+ <path d="M 484.93 -454.96777210621747 L 499.07 -454.96777210621747" style="stroke-width:1;"/>
+ <path d="M 525.4 -464.36836857592857 L 535.4 -474.36836857592857" style="stroke-width:1;"/>
+ <path d="M 535.4 -464.36836857592857 L 525.4 -474.36836857592857" style="stroke-width:1;"/>
+ <path d="M 530.4 -462.2983685759286 L 530.4 -476.43836857592856" style="stroke-width:1;"/>
+ <path d="M 523.33 -469.36836857592857 L 537.47 -469.36836857592857" style="stroke-width:1;"/>
+ <path d="M 563.8 -471.60700498969857 L 573.8 -481.60700498969857" style="stroke-width:1;"/>
+ <path d="M 573.8 -471.60700498969857 L 563.8 -481.60700498969857" style="stroke-width:1;"/>
+ <path d="M 568.8 -469.5370049896986 L 568.8 -483.67700498969856" style="stroke-width:1;"/>
+ <path d="M 561.73 -476.60700498969857 L 575.87 -476.60700498969857" style="stroke-width:1;"/>
+ <path d="M 602.2 -483.72478128708633 L 612.2 -493.72478128708633" style="stroke-width:1;"/>
+ <path d="M 612.2 -483.72478128708633 L 602.2 -493.72478128708633" style="stroke-width:1;"/>
+ <path d="M 607.2 -481.65478128708634 L 607.2 -495.7947812870863" style="stroke-width:1;"/>
+ <path d="M 600.13 -488.72478128708633 L 614.27 -488.72478128708633" style="stroke-width:1;"/>
+ <path d="M 640.6 -495.8842928172164 L 650.6 -505.8842928172164" style="stroke-width:1;"/>
+ <path d="M 650.6 -495.8842928172164 L 640.6 -505.8842928172164" style="stroke-width:1;"/>
+ <path d="M 645.6 -493.8142928172165 L 645.6 -507.95429281721647" style="stroke-width:1;"/>
+ <path d="M 638.53 -500.8842928172164 L 652.6700000000001 -500.8842928172164" style="stroke-width:1;"/>
+ <path d="M 679.0 -515.0 L 689.0 -525.0" style="stroke-width:1;"/>
+ <path d="M 689.0 -515.0 L 679.0 -525.0" style="stroke-width:1;"/>
+ <path d="M 684.0 -512.9300000000001 L 684.0 -527.0699999999999" style="stroke-width:1;"/>
+ <path d="M 676.9300000000001 -520.0 L 691.0699999999999 -520.0" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 338.4 -324.1345145080669 L 376.8 -325.74238861413437 L 415.2 -326.29329368633285 L 453.6 -326.81178115914537 L 492.0 -327.2508746310667 L 530.4 -326.9607662341673 L 568.8 -327.7901326615696 L 607.2 -328.30881425174374 L 645.6 -328.61852850216394 L 684.0 -329.34336273034893" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 330.4 -316.1345145080669 L 330.4 -332.1345145080669 L 346.4 -332.1345145080669 L 346.4 -316.1345145080669 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -324.1345145080669 M 342.4 -324.1345145080669 L 342.4 -324.135 M 342.4 -324.135 A 4 4 0 1 0 334.4 -324.135 A 4 4 0 1 0 342.4 -324.135 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 368.8 -317.74238861413437 L 368.8 -333.74238861413437 L 384.8 -333.74238861413437 L 384.8 -317.74238861413437 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -325.74238861413437 M 380.8 -325.74238861413437 L 380.8 -325.742 M 380.8 -325.742 A 4 4 0 1 0 372.8 -325.742 A 4 4 0 1 0 380.8 -325.742 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 407.2 -318.29329368633285 L 407.2 -334.29329368633285 L 423.2 -334.29329368633285 L 423.2 -318.29329368633285 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -326.29329368633285 M 419.2 -326.29329368633285 L 419.2 -326.293 M 419.2 -326.293 A 4 4 0 1 0 411.2 -326.293 A 4 4 0 1 0 419.2 -326.293 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 445.6 -318.81178115914537 L 445.6 -334.81178115914537 L 461.6 -334.81178115914537 L 461.6 -318.81178115914537 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -326.81178115914537 M 457.6 -326.81178115914537 L 457.6 -326.812 M 457.6 -326.812 A 4 4 0 1 0 449.6 -326.812 A 4 4 0 1 0 457.6 -326.812 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 484.0 -319.2508746310667 L 484.0 -335.2508746310667 L 500.0 -335.2508746310667 L 500.0 -319.2508746310667 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -327.2508746310667 M 496.0 -327.2508746310667 L 496 -327.251 M 496 -327.251 A 4 4 0 1 0 488 -327.251 A 4 4 0 1 0 496 -327.251 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 522.4 -318.9607662341673 L 522.4 -334.9607662341673 L 538.4 -334.9607662341673 L 538.4 -318.9607662341673 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -326.9607662341673 M 534.4 -326.9607662341673 L 534.4 -326.961 M 534.4 -326.961 A 4 4 0 1 0 526.4 -326.961 A 4 4 0 1 0 534.4 -326.961 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 560.8 -319.7901326615696 L 560.8 -335.7901326615696 L 576.8 -335.7901326615696 L 576.8 -319.7901326615696 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -327.7901326615696 M 572.8 -327.7901326615696 L 572.8 -327.79 M 572.8 -327.79 A 4 4 0 1 0 564.8 -327.79 A 4 4 0 1 0 572.8 -327.79 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 599.2 -320.30881425174374 L 599.2 -336.30881425174374 L 615.2 -336.30881425174374 L 615.2 -320.30881425174374 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -328.30881425174374 M 611.2 -328.30881425174374 L 611.2 -328.309 M 611.2 -328.309 A 4 4 0 1 0 603.2 -328.309 A 4 4 0 1 0 611.2 -328.309 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 637.6 -320.61852850216394 L 637.6 -336.61852850216394 L 653.6 -336.61852850216394 L 653.6 -320.61852850216394 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -328.61852850216394 M 649.6 -328.61852850216394 L 649.6 -328.619 M 649.6 -328.619 A 4 4 0 1 0 641.6 -328.619 A 4 4 0 1 0 649.6 -328.619 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 676.0 -321.34336273034893 L 676.0 -337.34336273034893 L 692.0 -337.34336273034893 L 692.0 -321.34336273034893 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -329.34336273034893 M 688.0 -329.34336273034893 L 688 -329.343 M 688 -329.343 A 4 4 0 1 0 680 -329.343 A 4 4 0 1 0 688 -329.343 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip15);">
+ <path d="M 290 -154 L 290 -192 L 324 -192 L 324 -154 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -182.66666666666669 L 314 -182.66666666666669" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 302.0 -177.66666666666669 L 312.0 -187.66666666666669" style="stroke-width:1;"/>
+ <path d="M 312.0 -177.66666666666669 L 302.0 -187.66666666666669" style="stroke-width:1;"/>
+ <path d="M 307.0 -175.5966666666667 L 307.0 -189.73666666666668" style="stroke-width:1;"/>
+ <path d="M 299.93 -182.66666666666669 L 314.07 -182.66666666666669" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-178.0">
+ ov_tree_map
+ </text>
+ <path d="M 300 -164.66666666666666 L 314 -164.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip16);">
+ <path d="M 299.0 -156.66666666666666 L 299.0 -172.66666666666666 L 315.0 -172.66666666666666 L 315.0 -156.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -164.66666666666666 M 311.0 -164.66666666666666 L 311 -164.667 M 311 -164.667 A 4 4 0 1 0 303 -164.667 A 4 4 0 1 0 311 -164.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-160.0">
+ n_map
+ </text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" ?>
+<!--Created by PyChart 1.39 Copyright 1999-2006 Yasushi Saito-->
+<svg viewBox="250.275 -544.5 535.725 436.5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="clip0">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip1">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip2">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip3">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip4">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip5">
+ <path d="M 338.4 -456.98891198891204 L 332.15 -466.98891198891204 L 344.65 -466.98891198891204 Z"/>
+ </clipPath>
+ <clipPath id="clip6">
+ <path d="M 376.8 -472.8200178200178 L 370.55 -482.8200178200178 L 383.05 -482.8200178200178 Z"/>
+ </clipPath>
+ <clipPath id="clip7">
+ <path d="M 415.2 -478.95703395703396 L 408.95 -488.95703395703396 L 421.45 -488.95703395703396 Z"/>
+ </clipPath>
+ <clipPath id="clip8">
+ <path d="M 453.6 -486.1632511632512 L 447.35 -496.1632511632512 L 459.85 -496.1632511632512 Z"/>
+ </clipPath>
+ <clipPath id="clip9">
+ <path d="M 492.0 -489.1174141174141 L 485.75 -499.1174141174141 L 498.25 -499.1174141174141 Z"/>
+ </clipPath>
+ <clipPath id="clip10">
+ <path d="M 530.4 -493.6040986040986 L 524.15 -503.6040986040986 L 536.65 -503.6040986040986 Z"/>
+ </clipPath>
+ <clipPath id="clip11">
+ <path d="M 568.8 -498.34323334323335 L 562.55 -508.34323334323335 L 575.05 -508.34323334323335 Z"/>
+ </clipPath>
+ <clipPath id="clip12">
+ <path d="M 607.2 -503.3981783981784 L 600.95 -513.3981783981784 L 613.45 -513.3981783981784 Z"/>
+ </clipPath>
+ <clipPath id="clip13">
+ <path d="M 645.6 -506.34244134244136 L 639.35 -516.3424413424414 L 651.85 -516.3424413424414 Z"/>
+ </clipPath>
+ <clipPath id="clip14">
+ <path d="M 684.0 -512.3170973170973 L 677.75 -522.3170973170973 L 690.25 -522.3170973170973 Z"/>
+ </clipPath>
+ <clipPath id="clip15">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip16">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip17">
+ <path d="M 338.4 -458.82387882387883 M 342.4 -458.82387882387883 L 342.4 -458.824 M 342.4 -458.824 A 4 4 0 1 0 334.4 -458.824 A 4 4 0 1 0 342.4 -458.824 Z"/>
+ </clipPath>
+ <clipPath id="clip18">
+ <path d="M 376.8 -473.4590634590635 M 380.8 -473.4590634590635 L 380.8 -473.459 M 380.8 -473.459 A 4 4 0 1 0 372.8 -473.459 A 4 4 0 1 0 380.8 -473.459 Z"/>
+ </clipPath>
+ <clipPath id="clip19">
+ <path d="M 415.2 -482.72448272448275 M 419.2 -482.72448272448275 L 419.2 -482.724 M 419.2 -482.724 A 4 4 0 1 0 411.2 -482.724 A 4 4 0 1 0 419.2 -482.724 Z"/>
+ </clipPath>
+ <clipPath id="clip20">
+ <path d="M 453.6 -483.33333333333337 M 457.6 -483.33333333333337 L 457.6 -483.333 M 457.6 -483.333 A 4 4 0 1 0 449.6 -483.333 A 4 4 0 1 0 457.6 -483.333 Z"/>
+ </clipPath>
+ <clipPath id="clip21">
+ <path d="M 492.0 -512.3789723789723 M 496.0 -512.3789723789723 L 496 -512.379 M 496 -512.379 A 4 4 0 1 0 488 -512.379 A 4 4 0 1 0 496 -512.379 Z"/>
+ </clipPath>
+ <clipPath id="clip22">
+ <path d="M 530.4 -493.71349371349373 M 534.4 -493.71349371349373 L 534.4 -493.713 M 534.4 -493.713 A 4 4 0 1 0 526.4 -493.713 A 4 4 0 1 0 534.4 -493.713 Z"/>
+ </clipPath>
+ <clipPath id="clip23">
+ <path d="M 568.8 -495.05098505098505 M 572.8 -495.05098505098505 L 572.8 -495.051 M 572.8 -495.051 A 4 4 0 1 0 564.8 -495.051 A 4 4 0 1 0 572.8 -495.051 Z"/>
+ </clipPath>
+ <clipPath id="clip24">
+ <path d="M 607.2 -500.3009603009603 M 611.2 -500.3009603009603 L 611.2 -500.301 M 611.2 -500.301 A 4 4 0 1 0 603.2 -500.301 A 4 4 0 1 0 611.2 -500.301 Z"/>
+ </clipPath>
+ <clipPath id="clip25">
+ <path d="M 645.6 -501.5533115533116 M 649.6 -501.5533115533116 L 649.6 -501.553 M 649.6 -501.553 A 4 4 0 1 0 641.6 -501.553 A 4 4 0 1 0 649.6 -501.553 Z"/>
+ </clipPath>
+ <clipPath id="clip26">
+ <path d="M 684.0 -508.0437580437581 M 688.0 -508.0437580437581 L 688 -508.044 M 688 -508.044 A 4 4 0 1 0 680 -508.044 A 4 4 0 1 0 688 -508.044 Z"/>
+ </clipPath>
+ <clipPath id="clip27">
+ <path d="M 294 -294 L 294 -526 L 786 -526 L 786 -294 Z"/>
+ </clipPath>
+ <clipPath id="clip28">
+ <path d="M 280 -280 L 280 -540 L 800 -540 L 800 -280 Z"/>
+ </clipPath>
+ <clipPath id="clip29">
+ <path d="M 332.15 -341.18176418176415 L 344.65 -341.18176418176415 L 338.4 -351.18176418176415 Z"/>
+ </clipPath>
+ <clipPath id="clip30">
+ <path d="M 370.55 -341.91179091179094 L 383.05 -341.91179091179094 L 376.8 -351.91179091179094 Z"/>
+ </clipPath>
+ <clipPath id="clip31">
+ <path d="M 408.95 -341.82665082665085 L 421.45 -341.82665082665085 L 415.2 -351.82665082665085 Z"/>
+ </clipPath>
+ <clipPath id="clip32">
+ <path d="M 447.35 -345.4953964953965 L 459.85 -345.4953964953965 L 453.6 -355.4953964953965 Z"/>
+ </clipPath>
+ <clipPath id="clip33">
+ <path d="M 485.75 -343.044352044352 L 498.25 -343.044352044352 L 492.0 -353.044352044352 Z"/>
+ </clipPath>
+ <clipPath id="clip34">
+ <path d="M 524.15 -345.6913176913177 L 536.65 -345.6913176913177 L 530.4 -355.6913176913177 Z"/>
+ </clipPath>
+ <clipPath id="clip35">
+ <path d="M 562.55 -345.4052074052074 L 575.05 -345.4052074052074 L 568.8 -355.4052074052074 Z"/>
+ </clipPath>
+ <clipPath id="clip36">
+ <path d="M 600.95 -345.7085437085437 L 613.45 -345.7085437085437 L 607.2 -355.7085437085437 Z"/>
+ </clipPath>
+ <clipPath id="clip37">
+ <path d="M 639.35 -351.85971685971685 L 651.85 -351.85971685971685 L 645.6 -361.85971685971685 Z"/>
+ </clipPath>
+ <clipPath id="clip38">
+ <path d="M 677.75 -351.7393327393327 L 690.25 -351.7393327393327 L 684.0 -361.7393327393327 Z"/>
+ </clipPath>
+ <clipPath id="clip39">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z"/>
+ </clipPath>
+ <clipPath id="clip40">
+ <path d="M 307.0 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 Z"/>
+ </clipPath>
+ <clipPath id="clip41">
+ <path d="M 307.0 -142.66666666666666 M 311.0 -142.66666666666666 L 311 -142.667 M 311 -142.667 A 4 4 0 1 0 303 -142.667 A 4 4 0 1 0 311 -142.667 Z"/>
+ </clipPath>
+ <clipPath id="clip42">
+ <path d="M 300.75 -119.66666666666666 L 313.25 -119.66666666666666 L 307.0 -129.66666666666666 Z"/>
+ </clipPath>
+ </defs>
+ <g style="stroke-linejoin:miter;font-size:7;font-family:Gill Sans Std;fill:none;stroke-linecap:butt;stroke:rgb(0,0,0);font-stretch:normal;stroke-dasharray:none;font-weight:normal;font-style:normal;stroke-width:0.5;">
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300 -300 L 780 -300"/>
+ <path d="M 300.0 -300 L 300.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,300,-279.001)" x="300.0" y="-279.00097346438844">
+ 0
+ </text>
+ <path d="M 338.4 -300 L 338.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,338.4,-279.001)" x="338.4" y="-279.00097346438844">
+ 200
+ </text>
+ <path d="M 376.8 -300 L 376.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,376.8,-279.001)" x="376.8" y="-279.00097346438844">
+ 400
+ </text>
+ <path d="M 415.2 -300 L 415.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,415.2,-279.001)" x="415.2" y="-279.00097346438844">
+ 600
+ </text>
+ <path d="M 453.6 -300 L 453.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,453.6,-279.001)" x="453.6" y="-279.00097346438844">
+ 800
+ </text>
+ <path d="M 492.0 -300 L 492.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,492,-279.001)" x="492.0" y="-279.00097346438844">
+ 1000
+ </text>
+ <path d="M 530.4 -300 L 530.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,530.4,-279.001)" x="530.4" y="-279.00097346438844">
+ 1200
+ </text>
+ <path d="M 568.8 -300 L 568.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,568.8,-279.001)" x="568.8" y="-279.00097346438844">
+ 1400
+ </text>
+ <path d="M 607.2 -300 L 607.2 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,607.2,-279.001)" x="607.2" y="-279.00097346438844">
+ 1600
+ </text>
+ <path d="M 645.6 -300 L 645.6 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,645.6,-279.001)" x="645.6" y="-279.00097346438844">
+ 1800
+ </text>
+ <path d="M 684.0 -300 L 684.0 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,684,-279.001)" x="684.0" y="-279.00097346438844">
+ 2000
+ </text>
+ <path d="M 722.4 -300 L 722.4 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,722.4,-279.001)" x="722.4" y="-279.00097346438844">
+ 2200
+ </text>
+ <path d="M 760.8 -300 L 760.8 -288"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,760.8,-279.001)" x="760.8" y="-279.00097346438844">
+ 2400
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="540.0" y="-252.00097346438844">
+ Size
+ </text>
+ <path d="M 300 -300 L 300 -520"/>
+ <path d="M 300 -300.0 L 288 -300.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-295.5)" x="288.0" y="-295.50048673219425">
+ 0.00e+00
+ </text>
+ <path d="M 300 -344.0 L 288 -344.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-339.5)" x="288.0" y="-339.50048673219425">
+ 4.44e-08
+ </text>
+ <path d="M 300 -388.0 L 288 -388.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-383.5)" x="288.0" y="-383.50048673219425">
+ 8.89e-08
+ </text>
+ <path d="M 300 -432.0 L 288 -432.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-427.5)" x="288.0" y="-427.5004867321942">
+ 1.33e-07
+ </text>
+ <path d="M 300 -476.0 L 288 -476.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-471.5)" x="288.0" y="-471.50048673219425">
+ 1.78e-07
+ </text>
+ <path d="M 300 -520.0 L 288 -520.0"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(50,288,-515.5)" x="288.0" y="-515.5004867321942">
+ 2.22e-07
+ </text>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" transform="rotate(-90,270.275,-410)" x="270.2753777963343" y="-410.0">
+ Average time (sec.)
+ </text>
+ <g style="clip-path:url(#clip0);">
+ <g style="clip-path:url(#clip1);">
+ <path d="M 338.4 -466.934956934957 L 376.8 -481.8899118899119 L 415.2 -493.65805365805363 L 453.6 -496.42906642906644 L 492.0 -502.7888327888328 L 530.4 -510.36927036927034 L 568.8 -514.6510246510247 L 607.2 -516.071676071676 L 645.6 -517.034947034947 L 684.0 -520.0" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip2);">
+ <path d="M 333.4 -461.934956934957 L 343.4 -471.934956934957" style="stroke-width:1;"/>
+ <path d="M 343.4 -461.934956934957 L 333.4 -471.934956934957" style="stroke-width:1;"/>
+ <path d="M 338.4 -459.8649569349569 L 338.4 -474.0049569349569" style="stroke-width:1;"/>
+ <path d="M 331.33 -466.934956934957 L 345.47 -466.934956934957" style="stroke-width:1;"/>
+ <path d="M 371.8 -476.8899118899119 L 381.8 -486.8899118899119" style="stroke-width:1;"/>
+ <path d="M 381.8 -476.8899118899119 L 371.8 -486.8899118899119" style="stroke-width:1;"/>
+ <path d="M 376.8 -474.8199118899119 L 376.8 -488.9599118899119" style="stroke-width:1;"/>
+ <path d="M 369.73 -481.8899118899119 L 383.87 -481.8899118899119" style="stroke-width:1;"/>
+ <path d="M 410.2 -488.65805365805363 L 420.2 -498.65805365805363" style="stroke-width:1;"/>
+ <path d="M 420.2 -488.65805365805363 L 410.2 -498.65805365805363" style="stroke-width:1;"/>
+ <path d="M 415.2 -486.5880536580537 L 415.2 -500.7280536580537" style="stroke-width:1;"/>
+ <path d="M 408.13 -493.65805365805363 L 422.27 -493.65805365805363" style="stroke-width:1;"/>
+ <path d="M 448.6 -491.42906642906644 L 458.6 -501.42906642906644" style="stroke-width:1;"/>
+ <path d="M 458.6 -491.42906642906644 L 448.6 -501.42906642906644" style="stroke-width:1;"/>
+ <path d="M 453.6 -489.3590664290664 L 453.6 -503.4990664290664" style="stroke-width:1;"/>
+ <path d="M 446.53 -496.42906642906644 L 460.66999999999996 -496.42906642906644" style="stroke-width:1;"/>
+ <path d="M 487.0 -497.7888327888328 L 497.0 -507.7888327888328" style="stroke-width:1;"/>
+ <path d="M 497.0 -497.7888327888328 L 487.0 -507.7888327888328" style="stroke-width:1;"/>
+ <path d="M 492.0 -495.7188327888328 L 492.0 -509.8588327888328" style="stroke-width:1;"/>
+ <path d="M 484.93 -502.7888327888328 L 499.07 -502.7888327888328" style="stroke-width:1;"/>
+ <path d="M 525.4 -505.36927036927034 L 535.4 -515.3692703692703" style="stroke-width:1;"/>
+ <path d="M 535.4 -505.36927036927034 L 525.4 -515.3692703692703" style="stroke-width:1;"/>
+ <path d="M 530.4 -503.2992703692704 L 530.4 -517.4392703692704" style="stroke-width:1;"/>
+ <path d="M 523.33 -510.36927036927034 L 537.47 -510.36927036927034" style="stroke-width:1;"/>
+ <path d="M 563.8 -509.65102465102467 L 573.8 -519.6510246510247" style="stroke-width:1;"/>
+ <path d="M 573.8 -509.65102465102467 L 563.8 -519.6510246510247" style="stroke-width:1;"/>
+ <path d="M 568.8 -507.5810246510247 L 568.8 -521.7210246510247" style="stroke-width:1;"/>
+ <path d="M 561.73 -514.6510246510247 L 575.87 -514.6510246510247" style="stroke-width:1;"/>
+ <path d="M 602.2 -511.07167607167605 L 612.2 -521.071676071676" style="stroke-width:1;"/>
+ <path d="M 612.2 -511.07167607167605 L 602.2 -521.071676071676" style="stroke-width:1;"/>
+ <path d="M 607.2 -509.0016760716761 L 607.2 -523.1416760716761" style="stroke-width:1;"/>
+ <path d="M 600.13 -516.071676071676 L 614.27 -516.071676071676" style="stroke-width:1;"/>
+ <path d="M 640.6 -512.034947034947 L 650.6 -522.034947034947" style="stroke-width:1;"/>
+ <path d="M 650.6 -512.034947034947 L 640.6 -522.034947034947" style="stroke-width:1;"/>
+ <path d="M 645.6 -509.96494703494704 L 645.6 -524.104947034947" style="stroke-width:1;"/>
+ <path d="M 638.53 -517.034947034947 L 652.6700000000001 -517.034947034947" style="stroke-width:1;"/>
+ <path d="M 679.0 -515.0 L 689.0 -525.0" style="stroke-width:1;"/>
+ <path d="M 689.0 -515.0 L 679.0 -525.0" style="stroke-width:1;"/>
+ <path d="M 684.0 -512.93 L 684.0 -527.0699999999999" style="stroke-width:1;"/>
+ <path d="M 676.9300000000001 -520.0 L 691.0699999999999 -520.0" style="stroke-width:1;"/>
+ </g>
+ <g style="clip-path:url(#clip3);">
+ <path d="M 338.4 -461.98891198891204 L 376.8 -477.8200178200178 L 415.2 -483.95703395703396 L 453.6 -491.1632511632512 L 492.0 -494.1174141174141 L 530.4 -498.6040986040986 L 568.8 -503.34323334323335 L 607.2 -508.3981783981784 L 645.6 -511.34244134244136 L 684.0 -517.3170973170973" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip4);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip5);">
+ <path d="M 332.15 -456.98891198891204 L 332.15 -466.98891198891204 L 344.65 -466.98891198891204 L 344.65 -456.98891198891204 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -456.98891198891204 L 332.15 -466.98891198891204 L 344.65 -466.98891198891204 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip6);">
+ <path d="M 370.55 -472.8200178200178 L 370.55 -482.8200178200178 L 383.05 -482.8200178200178 L 383.05 -472.8200178200178 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -472.8200178200178 L 370.55 -482.8200178200178 L 383.05 -482.8200178200178 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip7);">
+ <path d="M 408.95 -478.95703395703396 L 408.95 -488.95703395703396 L 421.45 -488.95703395703396 L 421.45 -478.95703395703396 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -478.95703395703396 L 408.95 -488.95703395703396 L 421.45 -488.95703395703396 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip8);">
+ <path d="M 447.35 -486.1632511632512 L 447.35 -496.1632511632512 L 459.85 -496.1632511632512 L 459.85 -486.1632511632512 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -486.1632511632512 L 447.35 -496.1632511632512 L 459.85 -496.1632511632512 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip9);">
+ <path d="M 485.75 -489.1174141174141 L 485.75 -499.1174141174141 L 498.25 -499.1174141174141 L 498.25 -489.1174141174141 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -489.1174141174141 L 485.75 -499.1174141174141 L 498.25 -499.1174141174141 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip10);">
+ <path d="M 524.15 -493.6040986040986 L 524.15 -503.6040986040986 L 536.65 -503.6040986040986 L 536.65 -493.6040986040986 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -493.6040986040986 L 524.15 -503.6040986040986 L 536.65 -503.6040986040986 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip11);">
+ <path d="M 562.55 -498.34323334323335 L 562.55 -508.34323334323335 L 575.05 -508.34323334323335 L 575.05 -498.34323334323335 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -498.34323334323335 L 562.55 -508.34323334323335 L 575.05 -508.34323334323335 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip12);">
+ <path d="M 600.95 -503.3981783981784 L 600.95 -513.3981783981784 L 613.45 -513.3981783981784 L 613.45 -503.3981783981784 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -503.3981783981784 L 600.95 -513.3981783981784 L 613.45 -513.3981783981784 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip13);">
+ <path d="M 639.35 -506.34244134244136 L 639.35 -516.3424413424414 L 651.85 -516.3424413424414 L 651.85 -506.34244134244136 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -506.34244134244136 L 639.35 -516.3424413424414 L 651.85 -516.3424413424414 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip14);">
+ <path d="M 677.75 -512.3170973170973 L 677.75 -522.3170973170973 L 690.25 -522.3170973170973 L 690.25 -512.3170973170973 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -512.3170973170973 L 677.75 -522.3170973170973 L 690.25 -522.3170973170973 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip15);">
+ <path d="M 338.4 -458.82387882387883 L 376.8 -473.4590634590635 L 415.2 -482.72448272448275 L 453.6 -483.33333333333337 L 492.0 -512.3789723789723 L 530.4 -493.71349371349373 L 568.8 -495.05098505098505 L 607.2 -500.3009603009603 L 645.6 -501.5533115533116 L 684.0 -508.0437580437581" style="stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip16);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip17);">
+ <path d="M 330.4 -450.82387882387883 L 330.4 -466.82387882387883 L 346.4 -466.82387882387883 L 346.4 -450.82387882387883 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 338.4 -458.82387882387883 M 342.4 -458.82387882387883 L 342.4 -458.824 M 342.4 -458.824 A 4 4 0 1 0 334.4 -458.824 A 4 4 0 1 0 342.4 -458.824 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip18);">
+ <path d="M 368.8 -465.4590634590635 L 368.8 -481.4590634590635 L 384.8 -481.4590634590635 L 384.8 -465.4590634590635 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 376.8 -473.4590634590635 M 380.8 -473.4590634590635 L 380.8 -473.459 M 380.8 -473.459 A 4 4 0 1 0 372.8 -473.459 A 4 4 0 1 0 380.8 -473.459 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip19);">
+ <path d="M 407.2 -474.72448272448275 L 407.2 -490.72448272448275 L 423.2 -490.72448272448275 L 423.2 -474.72448272448275 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 415.2 -482.72448272448275 M 419.2 -482.72448272448275 L 419.2 -482.724 M 419.2 -482.724 A 4 4 0 1 0 411.2 -482.724 A 4 4 0 1 0 419.2 -482.724 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip20);">
+ <path d="M 445.6 -475.33333333333337 L 445.6 -491.33333333333337 L 461.6 -491.33333333333337 L 461.6 -475.33333333333337 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 453.6 -483.33333333333337 M 457.6 -483.33333333333337 L 457.6 -483.333 M 457.6 -483.333 A 4 4 0 1 0 449.6 -483.333 A 4 4 0 1 0 457.6 -483.333 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip21);">
+ <path d="M 484.0 -504.3789723789724 L 484.0 -520.3789723789723 L 500.0 -520.3789723789723 L 500.0 -504.3789723789724 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 492.0 -512.3789723789723 M 496.0 -512.3789723789723 L 496 -512.379 M 496 -512.379 A 4 4 0 1 0 488 -512.379 A 4 4 0 1 0 496 -512.379 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip22);">
+ <path d="M 522.4 -485.71349371349373 L 522.4 -501.71349371349373 L 538.4 -501.71349371349373 L 538.4 -485.71349371349373 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 530.4 -493.71349371349373 M 534.4 -493.71349371349373 L 534.4 -493.713 M 534.4 -493.713 A 4 4 0 1 0 526.4 -493.713 A 4 4 0 1 0 534.4 -493.713 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip23);">
+ <path d="M 560.8 -487.05098505098505 L 560.8 -503.05098505098505 L 576.8 -503.05098505098505 L 576.8 -487.05098505098505 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 568.8 -495.05098505098505 M 572.8 -495.05098505098505 L 572.8 -495.051 M 572.8 -495.051 A 4 4 0 1 0 564.8 -495.051 A 4 4 0 1 0 572.8 -495.051 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip24);">
+ <path d="M 599.2 -492.3009603009603 L 599.2 -508.3009603009603 L 615.2 -508.3009603009603 L 615.2 -492.3009603009603 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 607.2 -500.3009603009603 M 611.2 -500.3009603009603 L 611.2 -500.301 M 611.2 -500.301 A 4 4 0 1 0 603.2 -500.301 A 4 4 0 1 0 611.2 -500.301 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip25);">
+ <path d="M 637.6 -493.5533115533116 L 637.6 -509.5533115533116 L 653.6 -509.5533115533116 L 653.6 -493.5533115533116 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 645.6 -501.5533115533116 M 649.6 -501.5533115533116 L 649.6 -501.553 M 649.6 -501.553 A 4 4 0 1 0 641.6 -501.553 A 4 4 0 1 0 649.6 -501.553 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip26);">
+ <path d="M 676.0 -500.0437580437581 L 676.0 -516.0437580437581 L 692.0 -516.0437580437581 L 692.0 -500.0437580437581 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 684.0 -508.0437580437581 M 688.0 -508.0437580437581 L 688 -508.044 M 688 -508.044 A 4 4 0 1 0 680 -508.044 A 4 4 0 1 0 688 -508.044 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="clip-path:url(#clip27);">
+ <path d="M 338.4 -346.18176418176415 L 376.8 -346.91179091179094 L 415.2 -346.82665082665085 L 453.6 -350.4953964953965 L 492.0 -348.044352044352 L 530.4 -350.6913176913177 L 568.8 -350.4052074052074 L 607.2 -350.7085437085437 L 645.6 -356.85971685971685 L 684.0 -356.7393327393327" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ </g>
+ <g style="clip-path:url(#clip28);">
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip29);">
+ <path d="M 332.15 -341.18176418176415 L 332.15 -351.18176418176415 L 344.65 -351.18176418176415 L 344.65 -341.18176418176415 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 332.15 -341.18176418176415 L 344.65 -341.18176418176415 L 338.4 -351.18176418176415 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip30);">
+ <path d="M 370.55 -341.91179091179094 L 370.55 -351.91179091179094 L 383.05 -351.91179091179094 L 383.05 -341.91179091179094 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 370.55 -341.91179091179094 L 383.05 -341.91179091179094 L 376.8 -351.91179091179094 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip31);">
+ <path d="M 408.95 -341.82665082665085 L 408.95 -351.82665082665085 L 421.45 -351.82665082665085 L 421.45 -341.82665082665085 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 408.95 -341.82665082665085 L 421.45 -341.82665082665085 L 415.2 -351.82665082665085 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip32);">
+ <path d="M 447.35 -345.4953964953965 L 447.35 -355.4953964953965 L 459.85 -355.4953964953965 L 459.85 -345.4953964953965 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 447.35 -345.4953964953965 L 459.85 -345.4953964953965 L 453.6 -355.4953964953965 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip33);">
+ <path d="M 485.75 -343.044352044352 L 485.75 -353.044352044352 L 498.25 -353.044352044352 L 498.25 -343.044352044352 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 485.75 -343.044352044352 L 498.25 -343.044352044352 L 492.0 -353.044352044352 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip34);">
+ <path d="M 524.15 -345.6913176913177 L 524.15 -355.6913176913177 L 536.65 -355.6913176913177 L 536.65 -345.6913176913177 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 524.15 -345.6913176913177 L 536.65 -345.6913176913177 L 530.4 -355.6913176913177 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip35);">
+ <path d="M 562.55 -345.4052074052074 L 562.55 -355.4052074052074 L 575.05 -355.4052074052074 L 575.05 -345.4052074052074 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 562.55 -345.4052074052074 L 575.05 -345.4052074052074 L 568.8 -355.4052074052074 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip36);">
+ <path d="M 600.95 -345.7085437085437 L 600.95 -355.7085437085437 L 613.45 -355.7085437085437 L 613.45 -345.7085437085437 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 600.95 -345.7085437085437 L 613.45 -345.7085437085437 L 607.2 -355.7085437085437 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip37);">
+ <path d="M 639.35 -351.85971685971685 L 639.35 -361.85971685971685 L 651.85 -361.85971685971685 L 651.85 -351.85971685971685 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 639.35 -351.85971685971685 L 651.85 -351.85971685971685 L 645.6 -361.85971685971685 Z"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip38);">
+ <path d="M 677.75 -351.7393327393327 L 677.75 -361.7393327393327 L 690.25 -361.7393327393327 L 690.25 -351.7393327393327 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 677.75 -351.7393327393327 L 690.25 -351.7393327393327 L 684.0 -361.7393327393327 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip39);">
+ <path d="M 290 -114 L 290 -188 L 324 -188 L 324 -114 Z" style="stroke:none;"/>
+ </g>
+ <path d="M 300 -178.66666666666669 L 314 -178.66666666666669" style="stroke:rgb(255,68,0);stroke-width:2;"/>
+ <path d="M 302.0 -173.66666666666669 L 312.0 -183.66666666666669" style="stroke-width:1;"/>
+ <path d="M 312.0 -173.66666666666669 L 302.0 -183.66666666666669" style="stroke-width:1;"/>
+ <path d="M 307.0 -171.59666666666666 L 307.0 -185.73666666666668" style="stroke-width:1;"/>
+ <path d="M 299.93 -178.66666666666669 L 314.07 -178.66666666666669" style="stroke-width:1;"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-174.0">
+ ov_tree_map
+ </text>
+ <path d="M 300 -160.66666666666666 L 314 -160.66666666666666" style="stroke:rgb(205,0,0);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip40);">
+ <path d="M 300.75 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 L 313.25 -155.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -155.66666666666666 L 300.75 -165.66666666666666 L 313.25 -165.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-156.0">
+ rb_tree_map
+ </text>
+ <path d="M 300 -142.66666666666666 L 314 -142.66666666666666" style="stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip41);">
+ <path d="M 299.0 -134.66666666666666 L 299.0 -150.66666666666666 L 315.0 -150.66666666666666 L 315.0 -134.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 307.0 -142.66666666666666 M 311.0 -142.66666666666666 L 311 -142.667 M 311 -142.667 A 4 4 0 1 0 303 -142.667 A 4 4 0 1 0 311 -142.667 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-138.0">
+ n_map
+ </text>
+ <path d="M 300 -124.66666666666666 L 314 -124.66666666666666" style="stroke:rgb(147,147,147);stroke-width:2;"/>
+ <g style="fill:rgb(255,255,255);clip-path:url(#clip42);">
+ <path d="M 300.75 -119.66666666666666 L 300.75 -129.66666666666666 L 313.25 -129.66666666666666 L 313.25 -119.66666666666666 Z" style="stroke:none;"/>
+ </g>
+ <g>
+ <path d="M 300.75 -119.66666666666666 L 313.25 -119.66666666666666 L 307.0 -129.66666666666666 Z"/>
+ <text style="font-size:14;stroke:none;fill:rgb(0,0,0);" x="314.0" y="-120.0">
+ splay_tree_map
+ </text>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
-<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="manual.ext.allocator.bitmap" xreflabel="bitmap_allocator">
<?dbhtml filename="bitmap_allocator.html"?>
-<info><title>bitmap_allocator</title>
+<info><title>The bitmap_allocator</title>
<keywordset>
<keyword>
ISO C++
</section>
-</section>
+</chapter>
-<part xmlns="http://docbook.org/ns/docbook" version="5.0"
+<part xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="manual.ext" xreflabel="Extensions">
<?dbhtml filename="extensions.html"?>
</info>
-
<preface><info><title/></info>
-
<para>
- Here we will make an attempt at describing the non-Standard extensions to
- the library. Some of these are from SGI's STL, some of these are GNU's,
- and some just seemed to appear on the doorstep.
+ Here we will make an attempt at describing the non-Standard
+ extensions to the library. Some of these are from older versions of
+ standard library components, namely SGI's STL, and some of these are
+ GNU's.
</para>
<para><emphasis>Before</emphasis> you leap in and use any of these
extensions, be aware of two things:
<!-- Chapter 01 : Compile Time Checks -->
<chapter xml:id="manual.ext.compile_checks" xreflabel="Compile Time Checks"><info><title>Compile Time Checks</title></info>
<?dbhtml filename="ext_compile_checks.html"?>
-
+
<para>
Also known as concept checking.
</para>
</chapter>
<!-- Chapter 02 : Debug Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="debug_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="debug_mode.xml">
</xi:include>
<!-- Chapter 03 : Parallel Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="parallel_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="parallel_mode.xml">
</xi:include>
<!-- Chapter 04 : Profile Mode -->
-<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="profile_mode.xml">
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="profile_mode.xml">
</xi:include>
-<!-- Chapter 05 : Allocators -->
-<chapter xml:id="manual.ext.allocator" xreflabel="Allocators"><info><title>Allocators</title></info>
-<?dbhtml filename="ext_allocators.html"?>
-
-
- <!-- Section 01 : __mt_alloc -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="mt_allocator.xml">
- </xi:include>
+<!-- XXX -->
+<!-- Allocators -->
+<!-- Chapter 05 : __mt_alloc -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="mt_allocator.xml">
+</xi:include>
- <!-- Section 02 : bitmap_allocator -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="bitmap_allocator.xml">
- </xi:include>
+<!-- Chapter 06 : bitmap_allocator -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="bitmap_allocator.xml">
+</xi:include>
-</chapter>
+<!-- Containers -->
+<!-- Chapter 07 : Policy-Based Data Structures -->
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="policy_data_structures.xml">
+</xi:include>
-<!-- Chapter 06 : Containers -->
-<chapter xml:id="manual.ext.containers" xreflabel="Containers"><info><title>Containers</title></info>
+<!-- Chapter 08 : HP/SGI -->
+<chapter xml:id="manual.ext.containers" xreflabel="Containers">
+ <info><title>HP/SGI Extensions</title></info>
<?dbhtml filename="ext_containers.html"?>
-
- <para>
- </para>
- <section xml:id="manual.ext.containers.pbds" xreflabel="Policy Based Data Structures"><info><title>Policy Based Data Structures</title></info>
-
- <para>
- <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html">More details here</link>.
- </para>
- </section>
- <section xml:id="manual.ext.containers.sgi" xreflabel="SGI ext"><info><title>HP/SGI</title></info>
-
- <para>
+ <section xml:id="manual.ext.containers.sgi" xreflabel="SGI ext">
+ <info><title>Backwards Compatibility</title></info>
+
+ <para>A few extensions and nods to backwards-compatibility have
+ been made with containers. Those dealing with older SGI-style
+ allocators are dealt with elsewhere. The remaining ones all deal
+ with bits:
+ </para>
+ <para>The old pre-standard <code>bit_vector</code> class is
+ present for backwards compatibility. It is simply a typedef for
+ the <code>vector<bool></code> specialization.
</para>
-<para>A few extensions and nods to backwards-compatibility have been made with
- containers. Those dealing with older SGI-style allocators are dealt with
- elsewhere. The remaining ones all deal with bits:
-</para>
-<para>The old pre-standard <code>bit_vector</code> class is present for
- backwards compatibility. It is simply a typedef for the
- <code>vector<bool></code> specialization.
-</para>
<para>The <code>bitset</code> class has a number of extensions, described in the
rest of this item. First, we'll mention that this implementation of
<code>bitset<N></code> is specialized for cases where N number of
</section>
- <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated HP/SGI</title></info>
-
+ <section xml:id="manual.ext.containers.deprecated_sgi" xreflabel="SGI ext dep"><info><title>Deprecated</title></info>
+
<para>
The SGI hashing classes <classname>hash_set</classname> and
</section>
</chapter>
-<!-- Chapter 07 : Utilities -->
+<!-- Chapter 09 : Utilities -->
<chapter xml:id="manual.ext.util" xreflabel="Utilities"><info><title>Utilities</title></info>
<?dbhtml filename="ext_utilities.html"?>
-
+
<para>
The <functional> header contains many additional functors
and helper functions, extending section 20.3. They are
</chapter>
-<!-- Chapter 08 : Algorithms -->
+<!-- Chapter 10 : Algorithms -->
<chapter xml:id="manual.ext.algorithms" xreflabel="Algorithms"><info><title>Algorithms</title></info>
<?dbhtml filename="ext_algorithms.html"?>
-
+
<para>25.1.6 (count, count_if) is extended with two more versions of count
and count_if. The standard versions return their results. The
additional signatures return void, but take a final parameter by
</chapter>
-<!-- Chapter 09 : Numerics -->
+<!-- Chapter 11 : Numerics -->
<chapter xml:id="manual.ext.numerics" xreflabel="Numerics"><info><title>Numerics</title></info>
<?dbhtml filename="ext_numerics.html"?>
-
+
<para>26.4, the generalized numeric operations such as accumulate, are extended
with the following functions:
</para>
void iota(_ForwardIter first, _ForwardIter last, _Tp value);</programlisting>
</chapter>
-<!-- Chapter 10 : Iterators -->
+<!-- Chapter 12 : Iterators -->
<chapter xml:id="manual.ext.iterators" xreflabel="Iterators"><info><title>Iterators</title></info>
<?dbhtml filename="ext_iterators.html"?>
-
+
<para>24.3.2 describes <code>struct iterator</code>, which didn't exist in the
original HP STL implementation (the language wasn't rich enough at the
time). For backwards compatibility, base classes are provided which
</chapter>
-<!-- Chapter 11 : IO -->
+<!-- Chapter 13 : IO -->
<chapter xml:id="manual.ext.io" xreflabel="IO"><info><title>Input and Output</title></info>
<?dbhtml filename="ext_io.html"?>
-
+
<para>
Extensions allowing <code>filebuf</code>s to be constructed from
</para>
<section xml:id="manual.ext.io.filebuf_derived" xreflabel="Derived filebufs"><info><title>Derived filebufs</title></info>
-
+
<para>The v2 library included non-standard extensions to construct
<code>std::filebuf</code>s from C stdio types such as
</section>
</chapter>
-<!-- Chapter 12 : Demangling -->
+<!-- Chapter 14 : Demangling -->
<chapter xml:id="manual.ext.demangle" xreflabel="Demangling"><info><title>Demangling</title></info>
<?dbhtml filename="ext_demangling.html"?>
-
+
<para>
Transforming C++ ABI identifiers (like RTTI symbols) into the
original C++ source identifiers is called
</para>
</chapter>
-<!-- Chapter 13 : Concurrency -->
+<!-- Chapter 15 : Concurrency -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="concurrency_extensions.xml">
</xi:include>
-<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="manual.ext.allocator.mt" xreflabel="mt allocator">
<?dbhtml filename="mt_allocator.html"?>
-<info><title>mt_allocator</title>
+<info><title>The mt_allocator</title>
<keywordset>
<keyword>
ISO C++
</section>
-</section>
+</chapter>
--- /dev/null
+<chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="manual.ext.containers.pbds" xreflabel="pbds">
+ <info>
+ <title>Policy-Based Data Structures</title>
+ <keywordset>
+ <keyword>
+ ISO C++
+ </keyword>
+ <keyword>
+ policy
+ </keyword>
+ <keyword>
+ container
+ </keyword>
+ <keyword>
+ data
+ </keyword>
+ <keyword>
+ structure
+ </keyword>
+ <keyword>
+ associated
+ </keyword>
+ <keyword>
+ tree
+ </keyword>
+ <keyword>
+ trie
+ </keyword>
+ <keyword>
+ hash
+ </keyword>
+ <keyword>
+ metaprogramming
+ </keyword>
+ </keywordset>
+ </info>
+ <?dbhtml filename="policy_data_structures.html"?>
+
+ <!-- 2006-04-01 Ami Tavory -->
+ <!-- 2011-05-25 Benjamin Kosnik -->
+
+ <!-- S01: intro -->
+ <section xml:id="pbds.intro">
+ <info><title>Intro</title></info>
+
+ <para>
+ 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 <literal>std</literal> and
+ <literal>std::tr1</literal> (except for some points where it differs
+ by design).
+ </para>
+ <para>
+ </para>
+
+ <section xml:id="pbds.intro.issues">
+ <info><title>Performance Issues</title></info>
+ <para>
+ </para>
+
+ <para>
+ An attempt is made to categorize the wide variety of possible
+ container designs in terms of performance-impacting factors. These
+ performance factors are translated into design policies and
+ incorporated into container design.
+ </para>
+
+ <para>
+ There is tension between unravelling factors into a coherent set of
+ policies. Every attempt is made to make a minimal set of
+ factors. However, in many cases multiple factors make for long
+ template names. Every attempt is made to alias and use typedefs in
+ the source files, but the generated names for external symbols can
+ be large for binary files or debuggers.
+ </para>
+
+ <para>
+ In many cases, the longer names allow capabilities and behaviours
+ controlled by macros to also be unamibiguously emitted as distinct
+ generated names.
+ </para>
+
+ <para>
+ Specific issues found while unraveling performance factors in the
+ design of associative containers and priority queues follow.
+ </para>
+
+ <section xml:id="pbds.intro.issues.associative">
+ <info><title>Associative</title></info>
+
+ <para>
+ Associative containers depend on their composite policies to a very
+ large extent. Implicitly hard-wiring policies can hamper their
+ performance and limit their functionality. An efficient hash-based
+ container, for example, requires policies for testing key
+ equivalence, hashing keys, translating hash values into positions
+ within the hash table, and determining when and how to resize the
+ table internally. A tree-based container can efficiently support
+ order statistics, i.e. the ability to query what is the order of
+ each key within the sequence of keys in the container, but only if
+ the container is supplied with a policy to internally update
+ meta-data. There are many other such examples.
+ </para>
+
+ <para>
+ Ideally, all associative containers would share the same
+ interface. Unfortunately, underlying data structures and mapping
+ semantics differentiate between different containers. For example,
+ suppose one writes a generic function manipulating an associative
+ container.
+ </para>
+
+ <programlisting>
+ template<typename Cntnr>
+ void
+ some_op_sequence(Cntnr& r_cnt)
+ {
+ ...
+ }
+ </programlisting>
+
+ <para>
+ Given this, then what can one assume about the instantiating
+ container? The answer varies according to its underlying data
+ structure. If the underlying data structure of
+ <literal>Cntnr</literal> is based on a tree or trie, then the order
+ of elements is well defined; otherwise, it is not, in general. If
+ the underlying data structure of <literal>Cntnr</literal> is based
+ on a collision-chaining hash table, then modifying
+ r_<literal>Cntnr</literal> will not invalidate its iterators' order;
+ if the underlying data structure is a probing hash table, then this
+ is not the case. If the underlying data structure is based on a tree
+ or trie, then a reference to the container can efficiently be split;
+ otherwise, it cannot, in general. If the underlying data structure
+ is a red-black tree, then splitting a reference to the container is
+ exception-free; if it is an ordered-vector tree, exceptions can be
+ thrown.
+ </para>
+
+ </section>
+
+ <section xml:id="pbds.intro.issues.priority_queue">
+ <info><title>Priority Que</title></info>
+
+ <para>
+ Priority queues are useful when one needs to efficiently access a
+ minimum (or maximum) value as the set of values changes.
+ </para>
+
+ <para>
+ Most useful data structures for priority queues have a relatively
+ simple structure, as they are geared toward relatively simple
+ requirements. Unfortunately, these structures do not support access
+ to an arbitrary value, which turns out to be necessary in many
+ algorithms. Say, decreasing an arbitrary value in a graph
+ algorithm. Therefore, some extra mechanism is necessary and must be
+ invented for accessing arbitrary values. There are at least two
+ alternatives: embedding an associative container in a priority
+ queue, or allowing cross-referencing through iterators. The first
+ solution adds significant overhead; the second solution requires a
+ precise definition of iterator invalidation. Which is the next
+ point...
+ </para>
+
+ <para>
+ Priority queues, like hash-based containers, store values in an
+ order that is meaningless and undefined externally. For example, a
+ <code>push</code> operation can internally reorganize the
+ values. Because of this characteristic, describing a priority
+ queues' iterator is difficult: on one hand, the values to which
+ iterators point can remain valid, but on the other, the logical
+ order of iterators can change unpredictably.
+ </para>
+
+ <para>
+ Roughly speaking, any element that is both inserted to a priority
+ queue (e.g. through <code>push</code>) and removed
+ from it (e.g., through <code>pop</code>), incurs a
+ logarithmic overhead (in the amortized sense). Different underlying
+ data structures place the actual cost differently: some are
+ optimized for amortized complexity, whereas others guarantee that
+ specific operations only have a constant cost. One underlying data
+ structure might be chosen if modifying a value is frequent
+ (Dijkstra's shortest-path algorithm), whereas a different one might
+ be chosen otherwise. Unfortunately, an array-based binary heap - an
+ underlying data structure that optimizes (in the amortized sense)
+ <code>push</code> and <code>pop</code> operations, differs from the
+ others in terms of its invalidation guarantees. Other design
+ decisions also impact the cost and placement of the overhead, at the
+ expense of more difference in the the kinds of operations that the
+ underlying data structure can support. These differences pose a
+ challenge when creating a uniform interface for priority queues.
+ </para>
+ </section>
+ </section>
+
+ <section xml:id="pbds.intro.motivation">
+ <info><title>Goals</title></info>
+
+ <para>
+ Many fine associative-container libraries were already written,
+ most notably, the C++ standard's associative containers. Why
+ then write another library? This section shows some possible
+ advantages of this library, when considering the challenges in
+ the introduction. Many of these points stem from the fact that
+ the ISO C++ process introduced associative-containers in a
+ two-step process (first standardizing tree-based containers,
+ only then adding hash-based containers, which are fundamentally
+ different), did not standardize priority queues as containers,
+ and (in our opinion) overloads the iterator concept.
+ </para>
+
+ <section xml:id="pbds.intro.motivation.associative">
+ <info><title>Associative</title></info>
+ <para>
+ </para>
+
+ <section xml:id="motivation.associative.policy">
+ <info><title>Policy Choices</title></info>
+ <para>
+ Associative containers require a relatively large number of
+ policies to function efficiently in various settings. In some
+ cases this is needed for making their common operations more
+ efficient, and in other cases this allows them to support a
+ larger set of operations
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Hash-based containers, for example, support look-up and
+ insertion methods (<function>find</function> and
+ <function>insert</function>). In order to locate elements
+ quickly, they are supplied a hash functor, which instruct
+ how to transform a key object into some size type; a hash
+ functor might transform <constant>"hello"</constant>
+ into <constant>1123002298</constant>. A hash table, though,
+ requires transforming each key object into some size-type
+ type in some specific domain; a hash table with a 128-long
+ table might transform <constant>"hello"</constant> into
+ position <constant>63</constant>. The policy by which the
+ hash value is transformed into a position within the table
+ can dramatically affect performance. Hash-based containers
+ also do not resize naturally (as opposed to tree-based
+ containers, for example). The appropriate resize policy is
+ unfortunately intertwined with the policy that transforms
+ hash value into a position within the table.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Tree-based containers, for example, also support look-up and
+ insertion methods, and are primarily useful when maintaining
+ order between elements is important. In some cases, though,
+ one can utilize their balancing algorithms for completely
+ different purposes.
+ </para>
+
+ <para>
+ Figure A shows a tree whose each node contains two entries:
+ a floating-point key, and some size-type
+ <emphasis>metadata</emphasis> (in bold beneath it) that is
+ the number of nodes in the sub-tree. (The root has key 0.99,
+ and has 5 nodes (including itself) in its sub-tree.) A
+ container based on this data structure can obviously answer
+ efficiently whether 0.3 is in the container object, but it
+ can also answer what is the order of 0.3 among all those in
+ the container object: see <xref linkend="biblio.clrs2001"/>.
+
+ </para>
+
+ <para>
+ As another example, Figure B shows a tree whose each node
+ contains two entries: a half-open geometric line interval,
+ and a number <emphasis>metadata</emphasis> (in bold beneath
+ it) that is the largest endpoint of all intervals in its
+ sub-tree. (The root describes the interval <constant>[20,
+ 36)</constant>, and the largest endpoint in its sub-tree is
+ 99.) A container based on this data structure can obviously
+ answer efficiently whether <constant>[3, 41)</constant> is
+ in the container object, but it can also answer efficiently
+ whether the container object has intervals that intersect
+ <constant>[3, 41)</constant>. These types of queries are
+ very useful in geometric algorithms and lease-management
+ algorithms.
+ </para>
+
+ <para>
+ It is important to note, however, that as the trees are
+ modified, their internal structure changes. To maintain
+ these invariants, one must supply some policy that is aware
+ of these changes. Without this, it would be better to use a
+ linked list (in itself very efficient for these purposes).
+ </para>
+
+ </listitem>
+ </orderedlist>
+
+ <figure>
+ <title>Node Invariants</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_node_invariants.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Node Invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="motivation.associative.underlying">
+ <info><title>Underlying Data Structures</title></info>
+ <para>
+ The standard C++ library contains associative containers based on
+ red-black trees and collision-chaining hash tables. These are
+ very useful, but they are not ideal for all types of
+ settings.
+ </para>
+
+ <para>
+ The figure below shows the different underlying data structures
+ currently supported in this library.
+ </para>
+
+ <figure>
+ <title>Underlying Associative Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Underlying Associative Data Structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ A shows a collision-chaining hash-table, B shows a probing
+ hash-table, C shows a red-black tree, D shows a splay tree, E shows
+ a tree based on an ordered vector(implicit in the order of the
+ elements), F shows a PATRICIA trie, and G shows a list-based
+ container with update policies.
+ </para>
+
+ <para>
+ Each of these data structures has some performance benefits, in
+ terms of speed, size or both. For now, note that vector-based trees
+ and probing hash tables manipulate memory more efficiently than
+ red-black trees and collision-chaining hash tables, and that
+ list-based associative containers are very useful for constructing
+ "multimaps".
+ </para>
+
+ <para>
+ Now consider a function manipulating a generic associative
+ container,
+ </para>
+ <programlisting>
+ template<class Cntnr>
+ int
+ some_op_sequence(Cntnr &r_cnt)
+ {
+ ...
+ }
+ </programlisting>
+
+ <para>
+ Ideally, the underlying data structure
+ of <classname>Cntnr</classname> would not affect what can be
+ done with <varname>r_cnt</varname>. Unfortunately, this is not
+ the case.
+ </para>
+
+ <para>
+ For example, if <classname>Cntnr</classname>
+ is <classname>std::map</classname>, then the function can
+ use
+ </para>
+ <programlisting>
+ std::for_each(r_cnt.find(foo), r_cnt.find(bar), foobar)
+ </programlisting>
+ <para>
+ in order to apply <classname>foobar</classname> to all
+ elements between <classname>foo</classname> and
+ <classname>bar</classname>. If
+ <classname>Cntnr</classname> is a hash-based container,
+ then this call's results are undefined.
+ </para>
+
+ <para>
+ Also, if <classname>Cntnr</classname> is tree-based, the type
+ and object of the comparison functor can be
+ accessed. If <classname>Cntnr</classname> is hash based, these
+ queries are nonsensical.
+ </para>
+
+ <para>
+ There are various other differences based on the container's
+ underlying data structure. For one, they can be constructed by,
+ and queried for, different policies. Furthermore:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Containers based on C, D, E and F store elements in a
+ meaningful order; the others store elements in a meaningless
+ (and probably time-varying) order. By implication, only
+ containers based on C, D, E and F can
+ support <function>erase</function> operations taking an
+ iterator and returning an iterator to the following element
+ without performance loss.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Containers based on C, D, E, and F can be split and joined
+ efficiently, while the others cannot. Containers based on C
+ and D, furthermore, can guarantee that this is exception-free;
+ containers based on E cannot guarantee this.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Containers based on all but E can guarantee that
+ erasing an element is exception free; containers based on E
+ cannot guarantee this. Containers based on all but B and E
+ can guarantee that modifying an object of their type does
+ not invalidate iterators or references to their elements,
+ while containers based on B and E cannot. Containers based
+ on C, D, and E can furthermore make a stronger guarantee,
+ namely that modifying an object of their type does not
+ affect the order of iterators.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ A unified tag and traits system (as used for the C++ standard
+ library iterators, for example) can ease generic manipulation of
+ associative containers based on different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="motivation.associative.iterators">
+ <info><title>Iterators</title></info>
+ <para>
+ Iterators are centric to the design of the standard library
+ containers, because of the container/algorithm/iterator
+ decomposition that allows an algorithm to operate on a range
+ through iterators of some sequence. Iterators, then, are useful
+ because they allow going over a
+ specific <emphasis>sequence</emphasis>. The standard library
+ also uses iterators for accessing a
+ specific <emphasis>element</emphasis>: when an associative
+ container returns one through <function>find</function>. The
+ standard library consistently uses the same types of iterators
+ for both purposes: going over a range, and accessing a specific
+ found element. Before the introduction of hash-based containers
+ to the standard library, this made sense (with the exception of
+ priority queues, which are discussed later).
+ </para>
+
+ <para>
+ Using the standard associative containers together with
+ non-order-preserving associative containers (and also because of
+ priority-queues container), there is a possible need for
+ different types of iterators for self-organizing containers:
+ the iterator concept seems overloaded to mean two different
+ things (in some cases). <remark> XXX
+ "ds_gen.html#find_range">Design::Associative
+ Containers::Data-Structure Genericity::Point-Type and Range-Type
+ Methods</remark>.
+ </para>
+
+ <section xml:id="associative.iterators.using">
+ <info>
+ <title>Using Point Iterators for Range Operations</title>
+ </info>
+ <para>
+ Suppose <classname>cntnr</classname> is some associative
+ container, and say <varname>c</varname> is an object of
+ type <classname>cntnr</classname>. Then what will be the outcome
+ of
+ </para>
+
+ <programlisting>
+ std::for_each(c.find(1), c.find(5), foo);
+ </programlisting>
+
+ <para>
+ If <classname>cntnr</classname> is a tree-based container
+ object, then an in-order walk will
+ apply <classname>foo</classname> to the relevant elements,
+ as in the graphic below, label A. If <varname>c</varname> is
+ a hash-based container, then the order of elements between any
+ two elements is undefined (and probably time-varying); there is
+ no guarantee that the elements traversed will coincide with the
+ <emphasis>logical</emphasis> elements between 1 and 5, as in
+ label B.
+ </para>
+
+ <figure>
+ <title>Range Iteration in Different Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Node Invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ In our opinion, this problem is not caused just because
+ red-black trees are order preserving while
+ collision-chaining hash tables are (generally) not - it
+ is more fundamental. Most of the standard's containers
+ order sequences in a well-defined manner that is
+ determined by their <emphasis>interface</emphasis>:
+ calling <function>insert</function> on a tree-based
+ container modifies its sequence in a predictable way, as
+ does calling <function>push_back</function> on a list or
+ a vector. Conversely, collision-chaining hash tables,
+ probing hash tables, priority queues, and list-based
+ containers (which are very useful for "multimaps") are
+ self-organizing data structures; the effect of each
+ operation modifies their sequences in a manner that is
+ (practically) determined by their
+ <emphasis>implementation</emphasis>.
+ </para>
+
+ <para>
+ Consequently, applying an algorithm to a sequence obtained from most
+ containers may or may not make sense, but applying it to a
+ sub-sequence of a self-organizing container does not.
+ </para>
+ </section>
+
+ <section xml:id="associative.iterators.cost">
+ <info>
+ <title>Cost to Point Iterators to Enable Range Operations</title>
+ </info>
+ <para>
+ Suppose <varname>c</varname> is some collision-chaining
+ hash-based container object, and one calls
+ </para>
+ <programlisting>c.find(3)</programlisting>
+ <para>
+ Then what composes the returned iterator?
+ </para>
+
+ <para>
+ In the graphic below, label A shows the simplest (and
+ most efficient) implementation of a collision-chaining
+ hash table. The little box marked
+ <classname>point_iterator</classname> shows an object
+ that contains a pointer to the element's node. Note that
+ this "iterator" has no way to move to the next element (
+ it cannot support
+ <function>operator++</function>). Conversely, the little
+ box marked <classname>iterator</classname> stores both a
+ pointer to the element, as well as some other
+ information (the bucket number of the element). the
+ second iterator, then, is "heavier" than the first one-
+ it requires more time and space. If we were to use a
+ different container to cross-reference into this
+ hash-table using these iterators - it would take much
+ more space. As noted above, nothing much can be done by
+ incrementing these iterators, so why is this extra
+ information needed?
+ </para>
+
+ <para>
+ Alternatively, one might create a collision-chaining hash-table
+ where the lists might be linked, forming a monolithic total-element
+ list, as in the graphic below, label B. Here the iterators are as
+ light as can be, but the hash-table's operations are more
+ complicated.
+ </para>
+
+ <figure>
+ <title>Point Iteration in Hash Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_point_iterators_range_ops_2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Point Iteration in Hash Data Structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ It should be noted that containers based on collision-chaining
+ hash-tables are not the only ones with this type of behavior;
+ many other self-organizing data structures display it as well.
+ </para>
+ </section>
+
+ <section xml:id="associative.iterators.invalidation">
+ <info><title>Invalidation Guarantees</title></info>
+ <para>Consider the following snippet:</para>
+ <programlisting>
+ it = c.find(3);
+ c.erase(5);
+ </programlisting>
+
+ <para>
+ Following the call to <classname>erase</classname>, what is the
+ validity of <classname>it</classname>: can it be de-referenced?
+ can it be incremented?
+ </para>
+
+ <para>
+ The answer depends on the underlying data structure of the
+ container. The graphic below shows three cases: A1 and A2 show
+ a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
+ show a collision-chaining hash table.
+ </para>
+
+ <figure>
+ <title>Effect of erase in different underlying data structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_invalidation_guarantee_erase.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Effect of erase in different underlying data structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
+ be de-referenced and incremented. The sequence of iterators
+ changed, but in a way that is well-defined by the interface.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Erasing 5 from B1 yields B2. Clearly, an iterator to 3 is
+ not valid at all - it cannot be de-referenced or
+ incremented; the order of iterators changed in a way that is
+ (practically) determined by the implementation and not by
+ the interface.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Erasing 5 from C1 yields C2. Here the situation is more
+ complicated. On the one hand, there is no problem in
+ de-referencing <classname>it</classname>. On the other hand,
+ the order of iterators changed in a way that is
+ (practically) determined by the implementation and not by
+ the interface.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ So in the standard library containers, it is not always possible
+ to express whether <varname>it</varname> is valid or not. This
+ is true also for <function>insert</function>. Again, the
+ iterator concept seems overloaded.
+ </para>
+ </section>
+ </section> <!--iterators-->
+
+
+ <section xml:id="motivation.associative.functions">
+ <info><title>Functional</title></info>
+ <para>
+ </para>
+
+ <para>
+ The design of the functional overlay to the underlying data
+ structures differs slightly from some of the conventions used in
+ the C++ standard. A strict public interface of methods that
+ comprise only operations which depend on the class's internal
+ structure; other operations are best designed as external
+ functions. (See <xref linkend="biblio.meyers02both"/>).With this
+ rubric, the standard associative containers lack some useful
+ methods, and provide other methods which would be better
+ removed.
+ </para>
+
+ <section xml:id="motivation.associative.functions.erase">
+ <info><title><function>erase</function></title></info>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Order-preserving standard associative containers provide the
+ method
+ </para>
+ <programlisting>
+ iterator
+ erase(iterator it)
+ </programlisting>
+
+ <para>
+ which takes an iterator, erases the corresponding
+ element, and returns an iterator to the following
+ element. Also standardd hash-based associative
+ containers provide this method. This seemingly
+ increasesgenericity between associative containers,
+ since it is possible to use
+ </para>
+ <programlisting>
+ typename C::iterator it = c.begin();
+ typename C::iterator e_it = c.end();
+
+ while(it != e_it)
+ it = pred(*it)? c.erase(it) : ++it;
+ </programlisting>
+
+ <para>
+ in order to erase from a container object <varname>
+ c</varname> all element which match a
+ predicate <classname>pred</classname>. However, in a
+ different sense this actually decreases genericity: an
+ integral implication of this method is that tree-based
+ associative containers' memory use is linear in the total
+ number of elements they store, while hash-based
+ containers' memory use is unbounded in the total number of
+ elements they store. Assume a hash-based container is
+ allowed to decrease its size when an element is
+ erased. Then the elements might be rehashed, which means
+ that there is no "next" element - it is simply
+ undefined. Consequently, it is possible to infer from the
+ fact that the standard library's hash-based containers
+ provide this method that they cannot downsize when
+ elements are erased. As a consequence, different code is
+ needed to manipulate different containers, assuming that
+ memory should be conserved. Therefor, this library's
+ non-order preserving associative containers omit this
+ method.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ All associative containers include a conditional-erase method
+ </para>
+ <programlisting>
+ template<
+ class Pred>
+ size_type
+ erase_if
+ (Pred pred)
+ </programlisting>
+ <para>
+ which erases all elements matching a predicate. This is probably the
+ only way to ensure linear-time multiple-item erase which can
+ actually downsize a container.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The standard associative containers provide methods for
+ multiple-item erase of the form
+ </para>
+ <programlisting>
+ size_type
+ erase(It b, It e)
+ </programlisting>
+ <para>
+ erasing a range of elements given by a pair of
+ iterators. For tree-based or trie-based containers, this can
+ implemented more efficiently as a (small) sequence of split
+ and join operations. For other, unordered, containers, this
+ method isn't much better than an external loop. Moreover,
+ if <varname>c</varname> is a hash-based container,
+ then
+ </para>
+ <programlisting>
+ c.erase(c.find(2), c.find(5))
+ </programlisting>
+ <para>
+ is almost certain to do something
+ different than erasing all elements whose keys are between 2
+ and 5, and is likely to produce other undefined behavior.
+ </para>
+ </listitem>
+ </orderedlist>
+ </section> <!-- erase -->
+
+ <section xml:id="motivation.associative.functions.split">
+ <info>
+ <title>
+ <function>split</function> and <function>join</function>
+ </title>
+ </info>
+ <para>
+ It is well-known that tree-based and trie-based container
+ objects can be efficiently split or joined (See
+ <xref linkend="biblio.clrs2001"/>). Externally splitting or
+ joining trees is super-linear, and, furthermore, can throw
+ exceptions. Split and join methods, consequently, seem good
+ choices for tree-based container methods, especially, since as
+ noted just before, they are efficient replacements for erasing
+ sub-sequences.
+ </para>
+
+ </section> <!-- split -->
+
+ <section xml:id="motivation.associative.functions.insert">
+ <info>
+ <title>
+ <function>insert</function>
+ </title>
+ </info>
+ <para>
+ The standard associative containers provide methods of the form
+ </para>
+ <programlisting>
+ template<class It>
+ size_type
+ insert(It b, It e);
+ </programlisting>
+
+ <para>
+ for inserting a range of elements given by a pair of
+ iterators. At best, this can be implemented as an external loop,
+ or, even more efficiently, as a join operation (for the case of
+ tree-based or trie-based containers). Moreover, these methods seem
+ similar to constructors taking a range given by a pair of
+ iterators; the constructors, however, are transactional, whereas
+ the insert methods are not; this is possibly confusing.
+ </para>
+
+ </section> <!-- insert -->
+
+ <section xml:id="motivation.associative.functions.compare">
+ <info>
+ <title>
+ <function>operator==</function> and <function>operator<=</function>
+ </title>
+ </info>
+
+ <para>
+ Associative containers are parametrized by policies allowing to
+ test key equivalence: a hash-based container can do this through
+ its equivalence functor, and a tree-based container can do this
+ through its comparison functor. In addition, some standard
+ associative containers have global function operators, like
+ <function>operator==</function> and <function>operator<=</function>,
+ that allow comparing entire associative containers.
+ </para>
+
+ <para>
+ In our opinion, these functions are better left out. To begin
+ with, they do not significantly improve over an external
+ loop. More importantly, however, they are possibly misleading -
+ <function>operator==</function>, for example, usually checks for
+ equivalence, or interchangeability, but the associative
+ container cannot check for values' equivalence, only keys'
+ equivalence; also, are two containers considered equivalent if
+ they store the same values in different order? this is an
+ arbitrary decision.
+ </para>
+ </section> <!-- compare -->
+
+ </section> <!-- functional -->
+
+ </section> <!--associative-->
+
+ <section xml:id="pbds.intro.motivation.priority_queue">
+ <info><title>Priority Queues</title></info>
+
+ <section xml:id="motivation.priority_queue.policy">
+ <info><title>Policy Choices</title></info>
+
+ <para>
+ Priority queues are containers that allow efficiently inserting
+ values and accessing the maximal value (in the sense of the
+ container's comparison functor). Their interface
+ supports <function>push</function>
+ and <function>pop</function>. The standard
+ container <classname>std::priorityqueue</classname> indeed support
+ these methods, but little else. For algorithmic and
+ software-engineering purposes, other methods are needed:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ Many graph algorithms (see
+ <xref linkend="biblio.clrs2001"/>) require increasing a
+ value in a priority queue (again, in the sense of the
+ container's comparison functor), or joining two
+ priority-queue objects.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The return type of <classname>priority_queue</classname>'s
+ <function>push</function> method is a point-type iterator, which can
+ be used for modifying or erasing arbitrary values. For
+ example:</para>
+ <programlisting>
+ priority_queue<int> p;
+ priority_queue<int>::point_iterator it = p.push(3);
+ p.modify(it, 4);
+ </programlisting>
+
+ <para>These types of cross-referencing operations are necessary
+ for making priority queues useful for different applications,
+ especially graph applications.</para>
+
+ </listitem>
+ <listitem>
+ <para>
+ It is sometimes necessary to erase an arbitrary value in a
+ priority queue. For example, consider
+ the <function>select</function> function for monitoring
+ file descriptors:
+ </para>
+
+ <programlisting>
+ int
+ select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds,
+ struct timeval *timeout);
+ </programlisting>
+ <para>
+ then, as the select documentation states:
+ </para>
+ <para>
+ <quote>
+ The nfds argument specifies the range of file
+ descriptors to be tested. The select() function tests file
+ descriptors in the range of 0 to nfds-1.</quote>
+ </para>
+
+ <para>
+ It stands to reason, therefore, that we might wish to
+ maintain a minimal value for <varname>nfds</varname>, and
+ priority queues immediately come to mind. Note, though, that
+ when a socket is closed, the minimal file description might
+ change; in the absence of an efficient means to erase an
+ arbitrary value from a priority queue, we might as well
+ avoid its use altogether.
+ </para>
+
+ <para>
+ The standard containers typically support iterators. It is
+ somewhat unusual
+ for <classname>std::priority_queue</classname> to omit them
+ (See <xref linkend="biblio.meyers01stl"/>). One might
+ ask why do priority queues need to support iterators, since
+ they are self-organizing containers with a different purpose
+ than abstracting sequences. There are several reasons:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Iterators (even in self-organizing containers) are
+ useful for many purposes: cross-referencing
+ containers, serialization, and debugging code that uses
+ these containers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The standard library's hash-based containers support
+ iterators, even though they too are self-organizing
+ containers with a different purpose than abstracting
+ sequences.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ In standard-library-like containers, it is natural to specify the
+ interface of operations for modifying a value or erasing
+ a value (discussed previously) in terms of a iterators.
+ It should be noted that the standard
+ containers also use iterators for accessing and
+ manipulating a specific value. In hash-based
+ containers, one checks the existence of a key by
+ comparing the iterator returned by <function>find</function> to the
+ iterator returned by <function>end</function>, and not by comparing a
+ pointer returned by <function>find</function> to <type>NULL</type>.
+ </para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="motivation.priority_queue.underlying">
+ <info><title>Underlying Data Structures</title></info>
+
+ <para>
+ There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the figure below with labels A1 and A2, B, and C.
+ </para>
+
+ <figure>
+ <title>Underlying Priority Queue Data Structures</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_different_underlying_dss_2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Underlying Priority Queue Data Structures</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ No single implementation can completely replace any of the
+ others. Some have better <function>push</function>
+ and <function>pop</function> amortized performance, some have
+ better bounded (worst case) response time than others, some
+ optimize a single method at the expense of others, etc. In
+ general the "best" implementation is dictated by the specific
+ problem.
+ </para>
+
+ <para>
+ As with associative containers, the more implementations
+ co-exist, the more necessary a traits mechanism is for handling
+ generic containers safely and efficiently. This is especially
+ important for priority queues, since the invalidation guarantees
+ of one of the most useful data structures - binary heaps - is
+ markedly different than those of most of the others.
+ </para>
+
+ </section>
+
+ <section xml:id="motivation.priority_queue.binary_heap">
+ <info><title>Binary Heaps</title></info>
+
+
+ <para>
+ Binary heaps are one of the most useful underlying
+ data structures for priority queues. They are very efficient in
+ terms of memory (since they don't require per-value structure
+ metadata), and have the best amortized <function>push</function> and
+ <function>pop</function> performance for primitive types like
+ <type>int</type>.
+ </para>
+
+ <para>
+ The standard library's <classname>priority_queue</classname>
+ implements this data structure as an adapter over a sequence,
+ typically
+ <classname>std::vector</classname>
+ or <classname>std::deque</classname>, which correspond to labels
+ A1 and A2 respectively in the graphic above.
+ </para>
+
+ <para>
+ This is indeed an elegant example of the adapter concept and
+ the algorithm/container/iterator decomposition. (See <xref linkend="biblio.nelson96stlpq"/>). There are
+ several reasons why a binary-heap priority queue
+ may be better implemented as a container instead of a
+ sequence adapter:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ <classname>std::priority_queue</classname> cannot erase values
+ from its adapted sequence (irrespective of the sequence
+ type). This means that the memory use of
+ an <classname>std::priority_queue</classname> object is always
+ proportional to the maximal number of values it ever contained,
+ and not to the number of values that it currently
+ contains. (See <filename>performance/priority_queue_text_pop_mem_usage.cc</filename>.)
+ This implementation of binary heaps acts very differently than
+ other underlying data structures (See also pairing heaps).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Some combinations of adapted sequences and value types
+ are very inefficient or just don't make sense. If one uses
+ <classname>std::priority_queue<std::vector<std::string>
+ > ></classname>, for example, then not only will each
+ operation perform a logarithmic number of
+ <classname>std::string</classname> assignments, but, furthermore, any
+ operation (including <function>pop</function>) can render the container
+ useless due to exceptions. Conversely, if one uses
+ <classname>std::priority_queue<std::deque<int> >
+ ></classname>, then each operation uses incurs a logarithmic
+ number of indirect accesses (through pointers) unnecessarily.
+ It might be better to let the container make a conservative
+ deduction whether to use the structure in the graphic above, labels A1 or A2.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ There does not seem to be a systematic way to determine
+ what exactly can be done with the priority queue.
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ If <classname>p</classname> is a priority queue adapting an
+ <classname>std::vector</classname>, then it is possible to iterate over
+ all values by using <function>&p.top()</function> and
+ <function>&p.top() + p.size()</function>, but this will not work
+ if <varname>p</varname> is adapting an <classname>std::deque</classname>; in any
+ case, one cannot use <classname>p.begin()</classname> and
+ <classname>p.end()</classname>. If a different sequence is adapted, it
+ is even more difficult to determine what can be
+ done.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ If <varname>p</varname> is a priority queue adapting an
+ <classname>std::deque</classname>, then the reference return by
+ </para>
+ <programlisting>
+ p.top()
+ </programlisting>
+ <para>
+ will remain valid until it is popped,
+ but if <varname>p</varname> adapts an <classname>std::vector</classname>, the
+ next <function>push</function> will invalidate it. If a different
+ sequence is adapted, it is even more difficult to
+ determine what can be done.
+ </para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ Sequence-based binary heaps can still implement
+ linear-time <function>erase</function> and <function>modify</function> operations.
+ This means that if one needs to erase a small
+ (say logarithmic) number of values, then one might still
+ choose this underlying data structure. Using
+ <classname>std::priority_queue</classname>, however, this will generally
+ change the order of growth of the entire sequence of
+ operations.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ </section>
+ </section>
+ </section> <!-- goals/motivation -->
+ </section> <!-- intro -->
+
+ <!-- S02: Using -->
+ <section xml:id="containers.pbds.using">
+ <info><title>Using</title></info>
+ <?dbhtml filename="policy_data_structures_using.html"?>
+
+ <section xml:id="pbds.using.prereq">
+ <info><title>Prerequisites</title></info>
+
+ <para>The library contains only header files, and does not require any
+ other libraries except the standard C++ library . All classes are
+ defined in namespace <code>__gnu_pbds</code>. The library internally
+ uses macros beginning with <code>PB_DS</code>, but
+ <code>#undef</code>s anything it <code>#define</code>s (except for
+ header guards). Compiling the library in an environment where macros
+ beginning in <code>PB_DS</code> are defined, may yield unpredictable
+ results in compilation, execution, or both.</para>
+
+ <para>
+ Further dependencies are necessary to create the visual output for the
+ performance tests. To create these graphs, two additional packages
+ will be needed: <command>pychart</command> and <command>Beautiful
+ Soup</command>.
+ </para>
+ </section>
+
+ <section xml:id="pbds.using.organization">
+ <info><title>Organization</title></info>
+
+ <para>
+ The various data structures are organized as follows.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Branch-Based
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>basic_branch</classname>
+ is an abstract base class for branched-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>tree</classname>
+ is a concrete base class for tree-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>trie</classname>
+ is a concrete base class trie-based
+ associative-containers
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ Hash-Based
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>basic_hash_table</classname>
+ is an abstract base class for hash-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>cc_hash_table</classname>
+ is a concrete collision-chaining hash-based
+ associative-containers
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>gp_hash_table</classname>
+ is a concrete (general) probing hash-based
+ associative-containers
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>
+ List-Based
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>list_update</classname>
+ list-based update-policy associative container
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+ Heap-Based
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>priority_queue</classname>
+ A priority queue.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ The hierarchy is composed naturally so that commonality is
+ captured by base classes. Thus <function>operator[]</function>
+ is defined at the base of any hierarchy, since all derived
+ containers support it. Conversely <function>split</function> is
+ defined in <classname>basic_branch</classname>, since only
+ tree-like containers support it.
+ </para>
+
+ <para>
+ In addition, there are the following diagnostics classes,
+ used to report errors specific to this library's data
+ structures.
+ </para>
+
+ <figure>
+ <title>Exception Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_exception_hierarchy.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="50"
+ fileref="../images/pbds_exception_hierarchy.pdf"/>
+ </imageobject>
+ <textobject>
+ <phrase>Exception Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="pbds.using.tutorial">
+ <info><title>Tutorial</title></info>
+
+ <section xml:id="pbds.using.tutorial.basic">
+ <info><title>Basic Use</title></info>
+
+ <para>
+ For the most part, the policy-based containers containers in
+ namespace <literal>__gnu_pbds</literal> have the same interface as
+ the equivalent containers in the standard C++ library, except for
+ the names used for the container classes themselves. For example,
+ this shows basic operations on a collision-chaining hash-based
+ container:
+ </para>
+ <programlisting>
+ #include <ext/pb_ds/assoc_container.h>
+
+ int main()
+ {
+ __gnu_pbds::cc_hash_table<int, char> c;
+ c[2] = 'b';
+ assert(c.find(1) == c.end());
+ };
+ </programlisting>
+
+ <para>
+ The container is called
+ <classname>__gnu_pbds::cc_hash_table</classname> instead of
+ <classname>std::unordered_map</classname>, since <quote>unordered
+ map</quote> does not necessarily mean a hash-based map as implied by
+ the C++ library (C++0x or TR1). For example, list-based associative
+ containers, which are very useful for the construction of
+ "multimaps," are also unordered.
+ </para>
+
+ <para>This snippet shows a red-black tree based container:</para>
+
+ <programlisting>
+ #include <ext/pb_ds/assoc_container.h>
+
+ int main()
+ {
+ __gnu_pbds::tree<int, char> c;
+ c[2] = 'b';
+ assert(c.find(2) != c.end());
+ };
+ </programlisting>
+
+ <para>The container is called <classname>tree</classname> instead of
+ <classname>map</classname> since the underlying data structures are
+ being named with specificity.
+ </para>
+
+ <para>
+ The member function naming convention is to strive to be the same as
+ the equivalent member functions in other C++ standard library
+ containers. The familiar methods are unchanged:
+ <function>begin</function>, <function>end</function>,
+ <function>size</function>, <function>empty</function>, and
+ <function>clear</function>.
+ </para>
+
+ <para>
+ This isn't to say that things are exactly as one would expect, given
+ the container requirments and interfaces in the C++ standard.
+ </para>
+
+ <para>
+ The names of containers' policies and policy accessors are
+ different then the usual. For example, if <type>hash_type</type> is
+ some type of hash-based container, then</para>
+
+ <programlisting>
+ hash_type::hash_fn
+ </programlisting>
+
+ <para>
+ gives the type of its hash functor, and if <varname>obj</varname> is
+ some hash-based container object, then
+ </para>
+
+ <programlisting>
+ obj.get_hash_fn()
+ </programlisting>
+
+ <para>will return a reference to its hash-functor object.</para>
+
+
+ <para>
+ Similarly, if <type>tree_type</type> is some type of tree-based
+ container, then
+ </para>
+
+ <programlisting>
+ tree_type::cmp_fn
+ </programlisting>
+
+ <para>
+ gives the type of its comparison functor, and if
+ <varname>obj</varname> is some tree-based container object,
+ then
+ </para>
+
+ <programlisting>
+ obj.get_cmp_fn()
+ </programlisting>
+
+ <para>will return a reference to its comparison-functor object.</para>
+
+ <para>
+ It would be nice to give names consistent with those in the existing
+ C++ standard (inclusive of TR1). Unfortunately, these standard
+ containers don't consistently name types and methods. For example,
+ <classname>std::tr1::unordered_map</classname> uses
+ <type>hasher</type> for the hash functor, but
+ <classname>std::map</classname> uses <type>key_compare</type> for
+ the comparison functor. Also, we could not find an accessor for
+ <classname>std::tr1::unordered_map</classname>'s hash functor, but
+ <classname>std::map</classname> uses <classname>compare</classname>
+ for accessing the comparison functor.
+ </para>
+
+ <para>
+ Instead, <literal>__gnu_pbds</literal> attempts to be internally
+ consistent, and uses standard-derived terminology if possible.
+ </para>
+
+ <para>
+ Another source of difference is in scope:
+ <literal>__gnu_pbds</literal> contains more types of associative
+ containers than the standard C++ library, and more opportunities
+ to configure these new containers, since different types of
+ associative containers are useful in different settings.
+ </para>
+
+ <para>
+ Namespace <literal>__gnu_pbds</literal> contains different classes for
+ hash-based containers, tree-based containers, trie-based containers,
+ and list-based containers.
+ </para>
+
+ <para>
+ Since associative containers share parts of their interface, they
+ are organized as a class hierarchy.
+ </para>
+
+ <para>Each type or method is defined in the most-common ancestor
+ in which it makes sense.
+ </para>
+
+ <para>For example, all associative containers support iteration
+ expressed in the following form:
+ </para>
+
+ <programlisting>
+ const_iterator
+ begin() const;
+
+ iterator
+ begin();
+
+ const_iterator
+ end() const;
+
+ iterator
+ end();
+ </programlisting>
+
+ <para>
+ But not all containers contain or use hash functors. Yet, both
+ collision-chaining and (general) probing hash-based associative
+ containers have a hash functor, so
+ <classname>basic_hash_table</classname> contains the interface:
+ </para>
+
+ <programlisting>
+ const hash_fn&
+ get_hash_fn() const;
+
+ hash_fn&
+ get_hash_fn();
+ </programlisting>
+
+ <para>
+ so all hash-based associative containers inherit the same
+ hash-functor accessor methods.
+ </para>
+
+ </section> <!--basic use -->
+
+ <section xml:id="pbds.using.tutorial.configuring">
+ <info>
+ <title>
+ Configuring via Template Parameters
+ </title>
+ </info>
+
+ <para>
+ In general, each of this library's containers is
+ parametrized by more policies than those of the standard library. For
+ example, the standard hash-based container is parametrized as
+ follows:
+ </para>
+ <programlisting>
+ template<typename Key, typename Mapped, typename Hash,
+ typename Pred, typename Allocator, bool Cache_Hashe_Code>
+ class unordered_map;
+ </programlisting>
+
+ <para>
+ and so can be configured by key type, mapped type, a functor
+ that translates keys to unsigned integral types, an equivalence
+ predicate, an allocator, and an indicator whether to store hash
+ values with each entry. this library's collision-chaining
+ hash-based container is parametrized as
+ </para>
+ <programlisting>
+ template<typename Key, typename Mapped, typename Hash_Fn,
+ typename Eq_Fn, typename Comb_Hash_Fn,
+ typename Resize_Policy, bool Store_Hash
+ typename Allocator>
+ class cc_hash_table;
+ </programlisting>
+
+ <para>
+ and so can be configured by the first four types of
+ <classname>std::tr1::unordered_map</classname>, then a
+ policy for translating the key-hash result into a position
+ within the table, then a policy by which the table resizes,
+ an indicator whether to store hash values with each entry,
+ and an allocator (which is typically the last template
+ parameter in standard containers).
+ </para>
+
+ <para>
+ Nearly all policy parameters have default values, so this
+ need not be considered for casual use. It is important to
+ note, however, that hash-based containers' policies can
+ dramatically alter their performance in different settings,
+ and that tree-based containers' policies can make them
+ useful for other purposes than just look-up.
+ </para>
+
+
+ <para>As opposed to associative containers, priority queues have
+ relatively few configuration options. The priority queue is
+ parametrized as follows:</para>
+ <programlisting>
+ template<typename Value_Type, typename Cmp_Fn,typename Tag,
+ typename Allocator>
+ class priority_queue;
+ </programlisting>
+
+ <para>The <classname>Value_Type</classname>, <classname>Cmp_Fn</classname>, and
+ <classname>Allocator</classname> parameters are the container's value type,
+ comparison-functor type, and allocator type, respectively;
+ these are very similar to the standard's priority queue. The
+ <classname>Tag</classname> parameter is different: there are a number of
+ pre-defined tag types corresponding to binary heaps, binomial
+ heaps, etc., and <classname>Tag</classname> should be instantiated
+ by one of them.</para>
+
+ <para>Note that as opposed to the
+ <classname>std::priority_queue</classname>,
+ <classname>__gnu_pbds::priority_queue</classname> is not a
+ sequence-adapter; it is a regular container.</para>
+
+ </section>
+
+ <section xml:id="pbds.using.tutorial.traits">
+ <info>
+ <title>
+ Querying Container Attributes
+ </title>
+ </info>
+ <para></para>
+
+ <para>A containers underlying data structure
+ affect their performance; Unfortunately, they can also affect
+ their interface. When manipulating generically associative
+ containers, it is often useful to be able to statically
+ determine what they can support and what the cannot.
+ </para>
+
+ <para>Happily, the standard provides a good solution to a similar
+ problem - that of the different behavior of iterators. If
+ <classname>It</classname> is an iterator, then
+ </para>
+ <programlisting>
+ typename std::iterator_traits<It>::iterator_category
+ </programlisting>
+
+ <para>is one of a small number of pre-defined tag classes, and
+ </para>
+ <programlisting>
+ typename std::iterator_traits<It>::value_type
+ </programlisting>
+
+ <para>is the value type to which the iterator "points".</para>
+
+ <para>
+ Similarly, in this library, if <type>C</type> is a
+ container, then <classname>container_traits</classname> is a
+ trait class that stores information about the kind of
+ container that is implemented.
+ </para>
+ <programlisting>
+ typename container_traits<C>::container_category
+ </programlisting>
+ <para>
+ is one of a small number of predefined tag structures that
+ uniquely identifies the type of underlying data structure.
+ </para>
+
+ <para>In most cases, however, the exact underlying data
+ structure is not really important, but what is important is
+ one of its other attributes: whether it guarantees storing
+ elements by key order, for example. For this one can
+ use</para>
+ <programlisting>
+ typename container_traits<C>::order_preserving
+ </programlisting>
+ <para>
+ Also,
+ </para>
+ <programlisting>
+ typename container_traits<C>::invalidation_guarantee
+ </programlisting>
+
+ <para>is the container's invalidation guarantee. Invalidation
+ guarantees are especially important regarding priority queues,
+ since in this library's design, iterators are practically the
+ only way to manipulate them.</para>
+ </section>
+
+ <section xml:id="pbds.using.tutorial.point_range_iteration">
+ <info>
+ <title>
+ Point and Range Iteration
+ </title>
+ </info>
+ <para></para>
+
+ <para>This library differentiates between two types of methods
+ and iterators: point-type, and range-type. For example,
+ <function>find</function> and <function>insert</function> are point-type methods, since
+ they each deal with a specific element; their returned
+ iterators are point-type iterators. <function>begin</function> and
+ <function>end</function> are range-type methods, since they are not used to
+ find a specific element, but rather to go over all elements in
+ a container object; their returned iterators are range-type
+ iterators.
+ </para>
+
+ <para>Most containers store elements in an order that is
+ determined by their interface. Correspondingly, it is fine that
+ their point-type iterators are synonymous with their range-type
+ iterators. For example, in the following snippet
+ </para>
+ <programlisting>
+ std::for_each(c.find(1), c.find(5), foo);
+ </programlisting>
+ <para>
+ two point-type iterators (returned by <function>find</function>) are used
+ for a range-type purpose - going over all elements whose key is
+ between 1 and 5.
+ </para>
+
+ <para>
+ Conversely, the above snippet makes no sense for
+ self-organizing containers - ones that order (and reorder)
+ their elements by implementation. It would be nice to have a
+ uniform iterator system that would allow the above snippet to
+ compile only if it made sense.
+ </para>
+
+ <para>
+ This could trivially be done by specializing
+ <function>std::for_each</function> for the case of iterators returned by
+ <classname>std::tr1::unordered_map</classname>, but this would only solve the
+ problem for one algorithm and one container. Fundamentally, the
+ problem is that one can loop using a self-organizing
+ container's point-type iterators.
+ </para>
+
+ <para>
+ This library's containers define two families of
+ iterators: <type>point_const_iterator</type> and
+ <type>point_iterator</type> are the iterator types returned by
+ point-type methods; <type>const_iterator</type> and
+ <type>iterator</type> are the iterator types returned by range-type
+ methods.
+ </para>
+ <programlisting>
+ class <- some container ->
+ {
+ public:
+ ...
+
+ typedef <- something -> const_iterator;
+
+ typedef <- something -> iterator;
+
+ typedef <- something -> point_const_iterator;
+
+ typedef <- something -> point_iterator;
+
+ ...
+
+ public:
+ ...
+
+ const_iterator begin () const;
+
+ iterator begin();
+
+ point_const_iterator find(...) const;
+
+ point_iterator find(...);
+ };
+ </programlisting>
+
+ <para>For
+ containers whose interface defines sequence order , it
+ is very simple: point-type and range-type iterators are exactly
+ the same, which means that the above snippet will compile if it
+ is used for an order-preserving associative container.
+ </para>
+
+ <para>
+ For self-organizing containers, however, (hash-based
+ containers as a special example), the preceding snippet will
+ not compile, because their point-type iterators do not support
+ <function>operator++</function>.
+ </para>
+
+ <para>In any case, both for order-preserving and self-organizing
+ containers, the following snippet will compile:
+ </para>
+ <programlisting>
+ typename Cntnr::point_iterator it = c.find(2);
+ </programlisting>
+
+ <para>
+ because a range-type iterator can always be converted to a
+ point-type iterator.
+ </para>
+
+ <para>Distingushing between iterator types also
+ raises the point that a container's iterators might have
+ different invalidation rules concerning their de-referencing
+ abilities and movement abilities. This now corresponds exactly
+ to the question of whether point-type and range-type iterators
+ are valid. As explained above, <classname>container_traits</classname> allows
+ querying a container for its data structure attributes. The
+ iterator-invalidation guarantees are certainly a property of
+ the underlying data structure, and so
+ </para>
+ <programlisting>
+ container_traits<C>::invalidation_guarantee
+ </programlisting>
+
+ <para>
+ gives one of three pre-determined types that answer this
+ query.
+ </para>
+
+ </section>
+ </section> <!-- tutorial -->
+
+ <section xml:id="pbds.using.examples">
+ <info><title>Examples</title></info>
+ <para>
+ Additional code examples are provided in the source
+ distribution, as part of the regression and performance
+ testsuite.
+ </para>
+
+ <section xml:id="pbds.using.examples.basic">
+ <info><title>Intermediate Use</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Basic use of maps:
+ <filename>basic_map.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of sets:
+ <filename>basic_set.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Conditionally erasing values from an associative container object:
+ <filename>erase_if.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of multimaps:
+ <filename>basic_multimap.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of multisets:
+ <filename>basic_multiset.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Basic use of priority queues:
+ <filename>basic_priority_queue.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Splitting and joining priority queues:
+ <filename>priority_queue_split_join.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Conditionally erasing values from a priority queue:
+ <filename>priority_queue_erase_if.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.query">
+ <info><title>Querying with <classname>container_traits</classname> </title></info>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using <classname>container_traits</classname> to query
+ about underlying data structure behavior:
+ <filename>assoc_container_traits.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A non-compiling example showing wrong use of finding keys in
+ hash-based containers: <filename>hash_find_neg.cc</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Using <classname>container_traits</classname>
+ to query about underlying data structure behavior:
+ <filename>priority_queue_container_traits.cc</filename>
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container">
+ <info><title>By Container Method</title></info>
+ <para></para>
+
+ <section xml:id="pbds.using.examples.container.hash">
+ <info><title>Hash-Based</title></info>
+
+ <section xml:id="pbds.using.examples.container.hash.resize">
+ <info><title>size Related</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Setting the initial size of a hash-based container
+ object:
+ <filename>hash_initial_size.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A non-compiling example showing how not to resize a
+ hash-based container object:
+ <filename>hash_resize_neg.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Resizing the size of a hash-based container object:
+ <filename>hash_resize.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Showing an illegal resize of a hash-based container
+ object:
+ <filename>hash_illegal_resize.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Changing the load factors of a hash-based container
+ object: <filename>hash_load_set_change.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section xml:id="pbds.using.examples.container.hash.hashor">
+ <info><title>Hashing Function Related</title></info>
+ <para></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using a modulo range-hashing function for the case of an
+ unknown skewed key distribution:
+ <filename>hash_mod.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Writing a range-hashing functor for the case of a known
+ skewed key distribution:
+ <filename>shift_mask.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Storing the hash value along with each key:
+ <filename>store_hash.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Writing a ranged-hash functor:
+ <filename>ranged_hash.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.branch">
+ <info><title>Branch-Based</title></info>
+
+
+ <section xml:id="pbds.using.examples.container.branch.split">
+ <info><title>split or join Related</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Joining two tree-based container objects:
+ <filename>tree_join.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Splitting a PATRICIA trie container object:
+ <filename>trie_split.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Order statistics while joining two tree-based container
+ objects:
+ <filename>tree_order_statistics_join.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.branch.invariants">
+ <info><title>Node Invariants</title></info>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using trees for order statistics:
+ <filename>tree_order_statistics.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Augmenting trees to support operations on line
+ intervals:
+ <filename>tree_intervals.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.branch.trie">
+ <info><title>trie</title></info>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Using a PATRICIA trie for DNA strings:
+ <filename>trie_dna.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Using a PATRICIA
+ trie for finding all entries whose key matches a given prefix:
+ <filename>trie_prefix_search.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ </section>
+
+ <section xml:id="pbds.using.examples.container.priority_queue">
+ <info><title>Priority Queues</title></info>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Cross referencing an associative container and a priority
+ queue: <filename>priority_queue_xref.cc</filename>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Cross referencing a vector and a priority queue using a
+ very simple version of Dijkstra's shortest path
+ algorithm:
+ <filename>priority_queue_dijkstra.cc</filename>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+
+ </section>
+
+ </section>
+
+ </section> <!-- using -->
+
+ <!-- S03: Design -->
+
+
+<section xml:id="containers.pbds.design">
+ <info><title>Design</title></info>
+ <?dbhtml filename="policy_data_structures_design.html"?>
+ <para></para>
+
+ <section xml:id="pbds.design.concepts">
+ <info><title>Concepts</title></info>
+
+ <section xml:id="pbds.design.concepts.null_type">
+ <info><title>Null Policy Classes</title></info>
+
+ <para>
+ Associative containers are typically parametrized by various
+ policies. For example, a hash-based associative container is
+ parametrized by a hash-functor, transforming each key into an
+ non-negative numerical type. Each such value is then further mapped
+ into a position within the table. The mapping of a key into a
+ position within the table is therefore a two-step process.
+ </para>
+
+ <para>
+ In some cases, instantiations are redundant. For example, when the
+ keys are integers, it is possible to use a redundant hash policy,
+ which transforms each key into its value.
+ </para>
+
+ <para>
+ In some other cases, these policies are irrelevant. For example, a
+ hash-based associative container might transform keys into positions
+ within a table by a different method than the two-step method
+ described above. In such a case, the hash functor is simply
+ irrelevant.
+ </para>
+
+ <para>
+ When a policy is either redundant or irrelevant, it can be replaced
+ by <classname>null_type</classname>.
+ </para>
+
+ <para>
+ For example, a <emphasis>set</emphasis> is an associative
+ container with one of its template parameters (the one for the
+ mapped type) replaced with <classname>null_type</classname>. Other
+ places simplifications are made possible with this technique
+ include node updates in tree and trie data structures, and hash
+ and probe functions for hash data structures.
+ </para>
+ </section>
+
+ <section xml:id="pbds.design.concepts.associative_semantics">
+ <info><title>Map and Set Semantics</title></info>
+
+ <section xml:id="concepts.associative_semantics.set_vs_map">
+ <info>
+ <title>
+ Distinguishing Between Maps and Sets
+ </title>
+ </info>
+
+ <para>
+ Anyone familiar with the standard knows that there are four kinds
+ of associative containers: maps, sets, multimaps, and
+ multisets. The map datatype associates each key to
+ some data.
+ </para>
+
+ <para>
+ Sets are associative containers that simply store keys -
+ they do not map them to anything. In the standard, each map class
+ has a corresponding set class. E.g.,
+ <classname>std::map<int, char></classname> maps each
+ <classname>int</classname> to a <classname>char</classname>, but
+ <classname>std::set<int, char></classname> simply stores
+ <classname>int</classname>s. In this library, however, there are no
+ distinct classes for maps and sets. Instead, an associative
+ container's <classname>Mapped</classname> template parameter is a policy: if
+ it is instantiated by <classname>null_type</classname>, then it
+ is a "set"; otherwise, it is a "map". E.g.,
+ </para>
+ <programlisting>
+ cc_hash_table<int, char>
+ </programlisting>
+ <para>
+ is a "map" mapping each <type>int</type> value to a <type>
+ char</type>, but
+ </para>
+ <programlisting>
+ cc_hash_table<int, null_type>
+ </programlisting>
+ <para>
+ is a type that uniquely stores <type>int</type> values.
+ </para>
+ <para>Once the <classname>Mapped</classname> template parameter is instantiated
+ by <classname>null_type</classname>, then
+ the "set" acts very similarly to the standard's sets - it does not
+ map each key to a distinct <classname>null_type</classname> object. Also,
+ , the container's <type>value_type</type> is essentially
+ its <type>key_type</type> - just as with the standard's sets
+ .</para>
+
+ <para>
+ The standard's multimaps and multisets allow, respectively,
+ non-uniquely mapping keys and non-uniquely storing keys. As
+ discussed, the
+ reasons why this might be necessary are 1) that a key might be
+ decomposed into a primary key and a secondary key, 2) that a
+ key might appear more than once, or 3) any arbitrary
+ combination of 1)s and 2)s. Correspondingly,
+ one should use 1) "maps" mapping primary keys to secondary
+ keys, 2) "maps" mapping keys to size types, or 3) any arbitrary
+ combination of 1)s and 2)s. Thus, for example, an
+ <classname>std::multiset<int></classname> might be used to store
+ multiple instances of integers, but using this library's
+ containers, one might use
+ </para>
+ <programlisting>
+ tree<int, size_t>
+ </programlisting>
+
+ <para>
+ i.e., a <classname>map</classname> of <type>int</type>s to
+ <type>size_t</type>s.
+ </para>
+ <para>
+ These "multimaps" and "multisets" might be confusing to
+ anyone familiar with the standard's <classname>std::multimap</classname> and
+ <classname>std::multiset</classname>, because there is no clear
+ correspondence between the two. For example, in some cases
+ where one uses <classname>std::multiset</classname> in the standard, one might use
+ in this library a "multimap" of "multisets" - i.e., a
+ container that maps primary keys each to an associative
+ container that maps each secondary key to the number of times
+ it occurs.
+ </para>
+
+ <para>
+ When one uses a "multimap," one should choose with care the
+ type of container used for secondary keys.
+ </para>
+ </section> <!-- map vs set -->
+
+
+ <section xml:id="concepts.associative_semantics.multi">
+ <info><title>Alternatives to <classname>std::multiset</classname> and <classname>std::multimap</classname></title></info>
+
+ <para>
+ Brace onself: this library does not contain containers like
+ <classname>std::multimap</classname> or
+ <classname>std::multiset</classname>. Instead, these data
+ structures can be synthesized via manipulation of the
+ <classname>Mapped</classname> template parameter.
+ </para>
+ <para>
+ One maps the unique part of a key - the primary key, into an
+ associative-container of the (originally) non-unique parts of
+ the key - the secondary key. A primary associative-container
+ is an associative container of primary keys; a secondary
+ associative-container is an associative container of
+ secondary keys.
+ </para>
+
+ <para>
+ Stepping back a bit, and starting in from the beginning.
+ </para>
+
+
+ <para>
+ Maps (or sets) allow mapping (or storing) unique-key values.
+ The standard library also supplies associative containers which
+ map (or store) multiple values with equivalent keys:
+ <classname>std::multimap</classname>, <classname>std::multiset</classname>,
+ <classname>std::tr1::unordered_multimap</classname>, and
+ <classname>unordered_multiset</classname>. We first discuss how these might
+ be used, then why we think it is best to avoid them.
+ </para>
+
+ <para>
+ Suppose one builds a simple bank-account application that
+ records for each client (identified by an <classname>std::string</classname>)
+ and account-id (marked by an <type>unsigned long</type>) -
+ the balance in the account (described by a
+ <type>float</type>). Suppose further that ordering this
+ information is not useful, so a hash-based container is
+ preferable to a tree based container. Then one can use
+ </para>
+
+ <programlisting>
+ std::tr1::unordered_map<std::pair<std::string, unsigned long>, float, ...>
+ </programlisting>
+
+ <para>
+ which hashes every combination of client and account-id. This
+ might work well, except for the fact that it is now impossible
+ to efficiently list all of the accounts of a specific client
+ (this would practically require iterating over all
+ entries). Instead, one can use
+ </para>
+
+ <programlisting>
+ std::tr1::unordered_multimap<std::pair<std::string, unsigned long>, float, ...>
+ </programlisting>
+
+ <para>
+ which hashes every client, and decides equivalence based on
+ client only. This will ensure that all accounts belonging to a
+ specific user are stored consecutively.
+ </para>
+
+ <para>
+ Also, suppose one wants an integers' priority queue
+ (a container that supports <function>push</function>,
+ <function>pop</function>, and <function>top</function> operations, the last of which
+ returns the largest <type>int</type>) that also supports
+ operations such as <function>find</function> and <function>lower_bound</function>. A
+ reasonable solution is to build an adapter over
+ <classname>std::set<int></classname>. In this adapter,
+ <function>push</function> will just call the tree-based
+ associative container's <function>insert</function> method; <function>pop</function>
+ will call its <function>end</function> method, and use it to return the
+ preceding element (which must be the largest). Then this might
+ work well, except that the container object cannot hold
+ multiple instances of the same integer (<function>push(4)</function>,
+ will be a no-op if <constant>4</constant> is already in the
+ container object). If multiple keys are necessary, then one
+ might build the adapter over an
+ <classname>std::multiset<int></classname>.
+ </para>
+
+ <para>
+ The standard library's non-unique-mapping containers are useful
+ when (1) a key can be decomposed in to a primary key and a
+ secondary key, (2) a key is needed multiple times, or (3) any
+ combination of (1) and (2).
+ </para>
+
+ <para>
+ The graphic below shows how the standard library's container
+ design works internally; in this figure nodes shaded equally
+ represent equivalent-key values. Equivalent keys are stored
+ consecutively using the properties of the underlying data
+ structure: binary search trees (label A) store equivalent-key
+ values consecutively (in the sense of an in-order walk)
+ naturally; collision-chaining hash tables (label B) store
+ equivalent-key values in the same bucket, the bucket can be
+ arranged so that equivalent-key values are consecutive.
+ </para>
+
+ <figure>
+ <title>Non-unique Mapping Standard Containers</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_embedded_lists_1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Non-unique Mapping Standard Containers</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ Put differently, the standards' non-unique mapping
+ associative-containers are associative containers that map
+ primary keys to linked lists that are embedded into the
+ container. The graphic below shows again the two
+ containers from the first graphic above, this time with
+ the embedded linked lists of the grayed nodes marked
+ explicitly.
+ </para>
+
+ <figure xml:id="fig.pbds_embedded_lists_2">
+ <title>
+ Effect of embedded lists in
+ <classname>std::multimap</classname>
+ </title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_embedded_lists_2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>
+ Effect of embedded lists in
+ <classname>std::multimap</classname>
+ </phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ These embedded linked lists have several disadvantages.
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ The underlying data structure embeds the linked lists
+ according to its own consideration, which means that the
+ search path for a value might include several different
+ equivalent-key values. For example, the search path for the
+ the black node in either of the first graphic, labels A or B,
+ includes more than a single gray node.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The links of the linked lists are the underlying data
+ structures' nodes, which typically are quite structured. In
+ the case of tree-based containers (the grapic above, label
+ B), each "link" is actually a node with three pointers (one
+ to a parent and two to children), and a
+ relatively-complicated iteration algorithm. The linked
+ lists, therefore, can take up quite a lot of memory, and
+ iterating over all values equal to a given key (through the
+ return value of the standard
+ library's <function>equal_range</function>) can be
+ expensive.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The primary key is stored multiply; this uses more memory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Finally, the interface of this design excludes several
+ useful underlying data structures. Of all the unordered
+ self-organizing data structures, practically only
+ collision-chaining hash tables can (efficiently) guarantee
+ that equivalent-key values are stored consecutively.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ The above reasons hold even when the ratio of secondary keys to
+ primary keys (or average number of identical keys) is small, but
+ when it is large, there are more severe problems:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ The underlying data structures order the links inside each
+ embedded linked-lists according to their internal
+ considerations, which effectively means that each of the
+ links is unordered. Irrespective of the underlying data
+ structure, searching for a specific value can degrade to
+ linear complexity.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Similarly to the above point, it is impossible to apply
+ to the secondary keys considerations that apply to primary
+ keys. For example, it is not possible to maintain secondary
+ keys by sorted order.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ While the interface "understands" that all equivalent-key
+ values constitute a distinct list (through
+ <function>equal_range</function>), the underlying data
+ structure typically does not. This means that operations such
+ as erasing from a tree-based container all values whose keys
+ are equivalent to a a given key can be super-linear in the
+ size of the tree; this is also true also for several other
+ operations that target a specific list.
+ </para>
+ </listitem>
+
+ </orderedlist>
+
+ <para>
+ In this library, all associative containers map
+ (or store) unique-key values. One can (1) map primary keys to
+ secondary associative-containers (containers of
+ secondary keys) or non-associative containers (2) map identical
+ keys to a size-type representing the number of times they
+ occur, or (3) any combination of (1) and (2). Instead of
+ allowing multiple equivalent-key values, this library
+ supplies associative containers based on underlying
+ data structures that are suitable as secondary
+ associative-containers.
+ </para>
+
+ <para>
+ In the figure below, labels A and B show the equivalent
+ underlying data structures in this library, as mapped to the
+ first graphic above. Labels A and B, respectively. Each shaded
+ box represents some size-type or secondary
+ associative-container.
+ </para>
+
+ <figure>
+ <title>Non-unique Mapping Containers</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_embedded_lists_3.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Non-unique Mapping Containers</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ In the first example above, then, one would use an associative
+ container mapping each user to an associative container which
+ maps each application id to a start time (see
+ <filename>example/basic_multimap.cc</filename>); in the second
+ example, one would use an associative container mapping
+ each <classname>int</classname> to some size-type indicating the
+ number of times it logically occurs
+ (see <filename>example/basic_multiset.cc</filename>.
+ </para>
+
+ <para>
+ See the discussion in list-based container types for containers
+ especially suited as secondary associative-containers.
+ </para>
+ </section>
+
+ </section> <!-- map and set semantics -->
+
+ <section xml:id="pbds.design.concepts.iterator_semantics">
+ <info><title>Iterator Semantics</title></info>
+
+ <section xml:id="concepts.iterator_semantics.point_and_range">
+ <info><title>Point and Range Iterators</title></info>
+
+ <para>
+ Iterator concepts are bifurcated in this design, and are
+ comprised of point-type and range-type iteration.
+ </para>
+
+ <para>
+ A point-type iterator is an iterator that refers to a specific
+ element as returned through an
+ associative-container's <function>find</function> method.
+ </para>
+
+ <para>
+ A range-type iterator is an iterator that is used to go over a
+ sequence of elements, as returned by a container's
+ <function>find</function> method.
+ </para>
+
+ <para>
+ A point-type method is a method that
+ returns a point-type iterator; a range-type method is a method
+ that returns a range-type iterator.
+ </para>
+
+ <para>For most containers, these types are synonymous; for
+ self-organizing containers, such as hash-based containers or
+ priority queues, these are inherently different (in any
+ implementation, including that of C++ standard library
+ components), but in this design, it is made explicit. They are
+ distinct types.
+ </para>
+ </section>
+
+
+ <section xml:id="concepts.iterator_semantics.both">
+ <info><title>Distinguishing Point and Range Iterators</title></info>
+
+ <para>When using this library, is necessary to differentiate
+ between two types of methods and iterators: point-type methods and
+ iterators, and range-type methods and iterators. Each associative
+ container's interface includes the methods:</para>
+ <programlisting>
+ point_const_iterator
+ find(const_key_reference r_key) const;
+
+ point_iterator
+ find(const_key_reference r_key);
+
+ std::pair<point_iterator,bool>
+ insert(const_reference r_val);
+ </programlisting>
+
+ <para>The relationship between these iterator types varies between
+ container types. The figure below
+ shows the most general invariant between point-type and
+ range-type iterators: In <emphasis>A</emphasis> <literal>iterator</literal>, can
+ always be converted to <literal>point_iterator</literal>. In <emphasis>B</emphasis>
+ shows invariants for order-preserving containers: point-type
+ iterators are synonymous with range-type iterators.
+ Orthogonally, <emphasis>C</emphasis>shows invariants for "set"
+ containers: iterators are synonymous with const iterators.</para>
+
+ <figure>
+ <title>Point Iterator Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_point_iterator_hierarchy.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Point Iterator Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>Note that point-type iterators in self-organizing containers
+ (hash-based associative containers) lack movement
+ operators, such as <literal>operator++</literal> - in fact, this
+ is the reason why this library differentiates from the standard C++ librarys
+ design on this point.</para>
+
+ <para>Typically, one can determine an iterator's movement
+ capabilities using
+ <literal>std::iterator_traits<It>iterator_category</literal>,
+ which is a <literal>struct</literal> indicating the iterator's
+ movement capabilities. Unfortunately, none of the standard predefined
+ categories reflect a pointer's <emphasis>not</emphasis> having any
+ movement capabilities whatsoever. Consequently,
+ <literal>pb_ds</literal> adds a type
+ <literal>trivial_iterator_tag</literal> (whose name is taken from
+ a concept in C++ standardese, which is the category of iterators
+ with no movement capabilities.) All other standard C++ library
+ tags, such as <literal>forward_iterator_tag</literal> retain their
+ common use.</para>
+
+ </section>
+
+ <section xml:id="pbds.design.concepts.invalidation">
+ <info><title>Invalidation Guarantees</title></info>
+ <para>
+ If one manipulates a container object, then iterators previously
+ obtained from it can be invalidated. In some cases a
+ previously-obtained iterator cannot be de-referenced; in other cases,
+ the iterator's next or previous element might have changed
+ unpredictably. This corresponds exactly to the question whether a
+ point-type or range-type iterator (see previous concept) is valid or
+ not. In this design, one can query a container (in compile time) about
+ its invalidation guarantees.
+ </para>
+
+
+ <para>
+ Given three different types of associative containers, a modifying
+ operation (in that example, <function>erase</function>) invalidated
+ iterators in three different ways: the iterator of one container
+ remained completely valid - it could be de-referenced and
+ incremented; the iterator of a different container could not even be
+ de-referenced; the iterator of the third container could be
+ de-referenced, but its "next" iterator changed unpredictably.
+ </para>
+
+ <para>
+ Distinguishing between find and range types allows fine-grained
+ invalidation guarantees, because these questions correspond exactly
+ to the question of whether point-type iterators and range-type
+ iterators are valid. The graphic below shows tags corresponding to
+ different types of invalidation guarantees.
+ </para>
+
+ <figure>
+ <title>Invalidation Guarantee Tags Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_invalidation_tag_hierarchy.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="50"
+ fileref="../images/pbds_invalidation_tag_hierarchy.pdf"/>
+ </imageobject>
+ <textobject>
+ <phrase>Invalidation Guarantee Tags Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <classname>basic_invalidation_guarantee</classname>
+ corresponds to a basic guarantee that a point-type iterator,
+ a found pointer, or a found reference, remains valid as long
+ as the container object is not modified.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>point_invalidation_guarantee</classname>
+ corresponds to a guarantee that a point-type iterator, a
+ found pointer, or a found reference, remains valid even if
+ the container object is modified.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>range_invalidation_guarantee</classname>
+ corresponds to a guarantee that a range-type iterator remains
+ valid even if the container object is modified.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>To find the invalidation guarantee of a
+ container, one can use</para>
+ <programlisting>
+ typename container_traits<Cntnr>::invalidation_guarantee
+ </programlisting>
+
+ <para>Note that this hierarchy corresponds to the logic it
+ represents: if a container has range-invalidation guarantees,
+ then it must also have find invalidation guarantees;
+ correspondingly, its invalidation guarantee (in this case
+ <classname>range_invalidation_guarantee</classname>)
+ can be cast to its base class (in this case <classname>point_invalidation_guarantee</classname>).
+ This means that this this hierarchy can be used easily using
+ standard metaprogramming techniques, by specializing on the
+ type of <literal>invalidation_guarantee</literal>.</para>
+
+ <para>
+ These types of problems were addressed, in a more general
+ setting, in <xref linkend="biblio.meyers96more"/> - Item 2. In
+ our opinion, an invalidation-guarantee hierarchy would solve
+ these problems in all container types - not just associative
+ containers.
+ </para>
+
+ </section>
+ </section> <!-- iterator semantics -->
+
+ <section xml:id="pbds.design.concepts.genericity">
+ <info><title>Genericity</title></info>
+
+ <para>
+ The design attempts to address the following problem of
+ data-structure genericity. When writing a function manipulating
+ a generic container object, what is the behavior of the object?
+ Suppose one writes
+ </para>
+ <programlisting>
+ template<typename Cntnr>
+ void
+ some_op_sequence(Cntnr &r_container)
+ {
+ ...
+ }
+ </programlisting>
+
+ <para>
+ then one needs to address the following questions in the body
+ of <function>some_op_sequence</function>:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Which types and methods does <literal>Cntnr</literal> support?
+ Containers based on hash tables can be queries for the
+ hash-functor type and object; this is meaningless for tree-based
+ containers. Containers based on trees can be split, joined, or
+ can erase iterators and return the following iterator; this
+ cannot be done by hash-based containers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ What are the exception and invalidation guarantees
+ of <literal>Cntnr</literal>? A container based on a probing
+ hash-table invalidates all iterators when it is modified; this
+ is not the case for containers based on node-based
+ trees. Containers based on a node-based tree can be split or
+ joined without exceptions; this is not the case for containers
+ based on vector-based trees.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ How does the container maintain its elements? Tree-based and
+ Trie-based containers store elements by key order; others,
+ typically, do not. A container based on a splay trees or lists
+ with update policies "cache" "frequently accessed" elements;
+ containers based on most other underlying data structures do
+ not.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ How does one query a container about characteristics and
+ capabilities? What is the relationship between two different
+ data structures, if anything?
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>The remainder of this section explains these issues in
+ detail.</para>
+
+
+ <section xml:id="concepts.genericity.tag">
+ <info><title>Tag</title></info>
+ <para>
+ Tags are very useful for manipulating generic types. For example, if
+ <literal>It</literal> is an iterator class, then <literal>typename
+ It::iterator_category</literal> or <literal>typename
+ std::iterator_traits<It>::iterator_category</literal> will
+ yield its category, and <literal>typename
+ std::iterator_traits<It>::value_type</literal> will yield its
+ value type.
+ </para>
+
+ <para>
+ This library contains a container tag hierarchy corresponding to the
+ diagram below.
+ </para>
+
+ <figure>
+ <title>Container Tag Hierarchy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_container_tag_hierarchy.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="50"
+ fileref="../images/pbds_container_tag_hierarchy.pdf"/>
+ </imageobject>
+ <textobject>
+ <phrase>Container Tag Hierarchy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>
+ Given any container <type>Cntnr</type>, the tag of
+ the underlying data structure can be found via <literal>typename
+ Cntnr::container_category</literal>.
+ </para>
+
+ </section> <!-- tag -->
+
+ <section xml:id="concepts.genericity.traits">
+ <info><title>Traits</title></info>
+ <para></para>
+
+ <para>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <literal>Cntnr</literal>, then <literal><Cntnr></literal>
+ is a traits class identifying the properties of the
+ container.</para>
+
+ <para>To find if a container can throw when a key is erased (which
+ is true for vector-based trees, for example), one can
+ use
+ </para>
+ <programlisting>container_traits<Cntnr>::erase_can_throw</programlisting>
+
+ <para>
+ Some of the definitions in <classname>container_traits</classname>
+ are dependent on other
+ definitions. If <classname>container_traits<Cntnr>::order_preserving</classname>
+ is <constant>true</constant> (which is the case for containers
+ based on trees and tries), then the container can be split or
+ joined; in this
+ case, <classname>container_traits<Cntnr>::split_join_can_throw</classname>
+ indicates whether splits or joins can throw exceptions (which is
+ true for vector-based trees);
+ otherwise <classname>container_traits<Cntnr>::split_join_can_throw</classname>
+ will yield a compilation error. (This is somewhat similar to a
+ compile-time version of the COM model).
+ </para>
+
+ </section> <!-- traits -->
+
+ </section> <!-- genericity -->
+ </section> <!-- concepts -->
+
+ <section xml:id="pbds.design.container">
+ <info><title>By Container</title></info>
+
+ <!-- hash -->
+ <section xml:id="pbds.design.container.hash">
+ <info><title>hash</title></info>
+
+ <!--
+
+// hash policies
+/// general terms / background
+/// range hashing policies
+/// ranged-hash policies
+/// implementation
+
+// resize policies
+/// general
+/// size policies
+/// trigger policies
+/// implementation
+
+// policy interactions
+/// probe/size/trigger
+/// hash/trigger
+/// eq/hash/storing hash values
+/// size/load-check trigger
+ -->
+ <section xml:id="container.hash.interface">
+ <info><title>Interface</title></info>
+
+
+
+ <para>
+ The collision-chaining hash-based container has the
+ following declaration.</para>
+ <programlisting>
+ template<
+ typename Key,
+ typename Mapped,
+ typename Hash_Fn = std::hash<Key>,
+ typename Eq_Fn = std::equal_to<Key>,
+ typename Comb_Hash_Fn = direct_mask_range_hashing<>
+ typename Resize_Policy = default explained below.
+ bool Store_Hash = false,
+ typename Allocator = std::allocator<char> >
+ class cc_hash_table;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem><para><classname>Key</classname> is the key type.</para></listitem>
+
+ <listitem><para><classname>Mapped</classname> is the mapped-policy.</para></listitem>
+
+ <listitem><para><classname>Hash_Fn</classname> is a key hashing functor.</para></listitem>
+
+ <listitem><para><classname>Eq_Fn</classname> is a key equivalence functor.</para></listitem>
+
+ <listitem><para><classname>Comb_Hash_Fn</classname> is a range-hashing_functor;
+ it describes how to translate hash values into positions
+ within the table. </para></listitem>
+
+ <listitem><para><classname>Resize_Policy</classname> describes how a container object
+ should change its internal size. </para></listitem>
+
+ <listitem><para><classname>Store_Hash</classname> indicates whether the hash value
+ should be stored with each entry. </para></listitem>
+
+ <listitem><para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The probing hash-based container has the following
+ declaration.</para>
+ <programlisting>
+ template<
+ typename Key,
+ typename Mapped,
+ typename Hash_Fn = std::hash<Key>,
+ typename Eq_Fn = std::equal_to<Key>,
+ typename Comb_Probe_Fn = direct_mask_range_hashing<>
+ typename Probe_Fn = default explained below.
+ typename Resize_Policy = default explained below.
+ bool Store_Hash = false,
+ typename Allocator = std::allocator<char> >
+ class gp_hash_table;
+ </programlisting>
+
+ <para>The parameters are identical to those of the
+ collision-chaining container, except for the following.</para>
+
+ <orderedlist>
+ <listitem><para><classname>Comb_Probe_Fn</classname> describes how to transform a probe
+ sequence into a sequence of positions within the table.</para></listitem>
+
+ <listitem><para><classname>Probe_Fn</classname> describes a probe sequence policy.</para></listitem>
+ </orderedlist>
+
+ <para>Some of the default template values depend on the values of
+ other parameters, and are explained below.</para>
+
+ </section>
+ <section xml:id="container.hash.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.hash.details.hash_policies">
+ <info><title>Hash Policies</title></info>
+
+ <section xml:id="details.hash_policies.general">
+ <info><title>General</title></info>
+
+ <para>Following is an explanation of some functions which hashing
+ involves. The graphic below illustrates the discussion.</para>
+
+ <figure>
+ <title>Hash functions, ranged-hash functions, and
+ range-hashing functions</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_hash_ranged_hash_range_hashing_fns.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Hash functions, ranged-hash functions, and
+ range-hashing functions</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Let U be a domain (e.g., the integers, or the
+ strings of 3 characters). A hash-table algorithm needs to map
+ elements of U "uniformly" into the range [0,..., m -
+ 1] (where m is a non-negative integral value, and
+ is, in general, time varying). I.e., the algorithm needs
+ a ranged-hash function</para>
+
+ <para>
+ f : U × Z<subscript>+</subscript> → Z<subscript>+</subscript>
+ </para>
+
+ <para>such that for any u in U ,</para>
+
+ <para>0 ≤ f(u, m) ≤ m - 1</para>
+
+ <para>and which has "good uniformity" properties (say
+ <xref linkend="biblio.knuth98sorting"/>.)
+ One
+ common solution is to use the composition of the hash
+ function</para>
+
+ <para>h : U → Z<subscript>+</subscript> ,</para>
+
+ <para>which maps elements of U into the non-negative
+ integrals, and</para>
+
+ <para>g : Z<subscript>+</subscript> × Z<subscript>+</subscript> →
+ Z<subscript>+</subscript>,</para>
+
+ <para>which maps a non-negative hash value, and a non-negative
+ range upper-bound into a non-negative integral in the range
+ between 0 (inclusive) and the range upper bound (exclusive),
+ i.e., for any r in Z<subscript>+</subscript>,</para>
+
+ <para>0 ≤ g(r, m) ≤ m - 1</para>
+
+
+ <para>The resulting ranged-hash function, is</para>
+
+ <!-- ranged_hash_composed_of_hash_and_range_hashing -->
+ <equation>
+ <title>Ranged Hash Function</title>
+ <mathphrase>
+ f(u , m) = g(h(u), m)
+ </mathphrase>
+ </equation>
+
+ <para>From the above, it is obvious that given g and
+ h, f can always be composed (however the converse
+ is not true). The standard's hash-based containers allow specifying
+ a hash function, and use a hard-wired range-hashing function;
+ the ranged-hash function is implicitly composed.</para>
+
+ <para>The above describes the case where a key is to be mapped
+ into a single position within a hash table, e.g.,
+ in a collision-chaining table. In other cases, a key is to be
+ mapped into a sequence of positions within a table,
+ e.g., in a probing table. Similar terms apply in this
+ case: the table requires a ranged probe function,
+ mapping a key into a sequence of positions withing the table.
+ This is typically achieved by composing a hash function
+ mapping the key into a non-negative integral type, a
+ probe function transforming the hash value into a
+ sequence of hash values, and a range-hashing function
+ transforming the sequence of hash values into a sequence of
+ positions.</para>
+
+ </section>
+
+ <section xml:id="details.hash_policies.range">
+ <info><title>Range Hashing</title></info>
+
+ <para>Some common choices for range-hashing functions are the
+ division, multiplication, and middle-square methods (<xref linkend="biblio.knuth98sorting"/>), defined
+ as</para>
+
+ <equation>
+ <title>Range-Hashing, Division Method</title>
+ <mathphrase>
+ g(r, m) = r mod m
+ </mathphrase>
+ </equation>
+
+
+
+ <para>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</para>
+
+ <para>and</para>
+
+ <para>g(r, m) = ⌈ u/v ( r<superscript>2</superscript> mod v ) ⌉</para>
+
+ <para>respectively, for some positive integrals u and
+ v (typically powers of 2), and some a. Each of
+ these range-hashing functions works best for some different
+ setting.</para>
+
+ <para>The division method (see above) is a
+ very common choice. However, even this single method can be
+ implemented in two very different ways. It is possible to
+ implement using the low
+ level % (modulo) operation (for any m), or the
+ low level & (bit-mask) operation (for the case where
+ m is a power of 2), i.e.,</para>
+
+ <equation>
+ <title>Division via Prime Modulo</title>
+ <mathphrase>
+ g(r, m) = r % m
+ </mathphrase>
+ </equation>
+
+ <para>and</para>
+
+ <equation>
+ <title>Division via Bit Mask</title>
+ <mathphrase>
+ g(r, m) = r & m - 1, (with m =
+ 2<superscript>k</superscript> for some k)
+ </mathphrase>
+ </equation>
+
+
+ <para>respectively.</para>
+
+ <para>The % (modulo) implementation has the advantage that for
+ m a prime far from a power of 2, g(r, m) is
+ affected by all the bits of r (minimizing the chance of
+ collision). It has the disadvantage of using the costly modulo
+ operation. This method is hard-wired into SGI's implementation
+ .</para>
+
+ <para>The & (bit-mask) implementation has the advantage of
+ relying on the fast bit-wise and operation. It has the
+ disadvantage that for g(r, m) is affected only by the
+ low order bits of r. This method is hard-wired into
+ Dinkumware's implementation.</para>
+
+
+ </section>
+
+ <section xml:id="details.hash_policies.ranged">
+ <info><title>Ranged Hash</title></info>
+
+ <para>In cases it is beneficial to allow the
+ client to directly specify a ranged-hash hash function. It is
+ true, that the writer of the ranged-hash function cannot rely
+ on the values of m having specific numerical properties
+ suitable for hashing (in the sense used in <xref linkend="biblio.knuth98sorting"/>), since
+ the values of m are determined by a resize policy with
+ possibly orthogonal considerations.</para>
+
+ <para>There are two cases where a ranged-hash function can be
+ superior. The firs is when using perfect hashing: the
+ second is when the values of m can be used to estimate
+ the "general" number of distinct values required. This is
+ described in the following.</para>
+
+ <para>Let</para>
+
+ <para>
+ s = [ s<subscript>0</subscript>,..., s<subscript>t - 1</subscript>]
+ </para>
+
+ <para>be a string of t characters, each of which is from
+ domain S. Consider the following ranged-hash
+ function:</para>
+ <equation>
+ <title>
+ A Standard String Hash Function
+ </title>
+ <mathphrase>
+ f<subscript>1</subscript>(s, m) = ∑ <subscript>i =
+ 0</subscript><superscript>t - 1</superscript> s<subscript>i</subscript> a<superscript>i</superscript> mod m
+ </mathphrase>
+ </equation>
+
+
+ <para>where a is some non-negative integral value. This is
+ the standard string-hashing function used in SGI's
+ implementation (with a = 5). Its advantage is that
+ it takes into account all of the characters of the string.</para>
+
+ <para>Now assume that s is the string representation of a
+ of a long DNA sequence (and so S = {'A', 'C', 'G',
+ 'T'}). In this case, scanning the entire string might be
+ prohibitively expensive. A possible alternative might be to use
+ only the first k characters of the string, where</para>
+
+ <para>|S|<superscript>k</superscript> ≥ m ,</para>
+
+ <para>i.e., using the hash function</para>
+
+ <equation>
+ <title>
+ Only k String DNA Hash
+ </title>
+ <mathphrase>
+ f<subscript>2</subscript>(s, m) = ∑ <subscript>i
+ = 0</subscript><superscript>k - 1</superscript> s<subscript>i</subscript> a<superscript>i</superscript> mod m
+ </mathphrase>
+ </equation>
+
+ <para>requiring scanning over only</para>
+
+ <para>k = log<subscript>4</subscript>( m )</para>
+
+ <para>characters.</para>
+
+ <para>Other more elaborate hash-functions might scan k
+ characters starting at a random position (determined at each
+ resize), or scanning k random positions (determined at
+ each resize), i.e., using</para>
+
+ <para>f<subscript>3</subscript>(s, m) = ∑ <subscript>i =
+ r</subscript>0<superscript>r<subscript>0</subscript> + k - 1</superscript> s<subscript>i</subscript>
+ a<superscript>i</superscript> mod m ,</para>
+
+ <para>or</para>
+
+ <para>f<subscript>4</subscript>(s, m) = ∑ <subscript>i = 0</subscript><superscript>k -
+ 1</superscript> s<subscript>r</subscript>i a<superscript>r<subscript>i</subscript></superscript> mod
+ m ,</para>
+
+ <para>respectively, for r<subscript>0</subscript>,..., r<subscript>k-1</subscript>
+ each in the (inclusive) range [0,...,t-1].</para>
+
+ <para>It should be noted that the above functions cannot be
+ decomposed as per a ranged hash composed of hash and range hashing.</para>
+
+
+ </section>
+
+ <section xml:id="details.hash_policies.implementation">
+ <info><title>Implementation</title></info>
+
+ <para>This sub-subsection describes the implementation of
+ the above in this library. It first explains range-hashing
+ functions in collision-chaining tables, then ranged-hash
+ functions in collision-chaining tables, then probing-based
+ tables, and finally lists the relevant classes in this
+ library.</para>
+
+ <section xml:id="hash_policies.implementation.collision-chaining">
+ <info><title>
+ Range-Hashing and Ranged-Hashes in Collision-Chaining Tables
+ </title></info>
+
+
+ <para><classname>cc_hash_table</classname> is
+ parametrized by <classname>Hash_Fn</classname> and <classname>Comb_Hash_Fn</classname>, a
+ hash functor and a combining hash functor, respectively.</para>
+
+ <para>In general, <classname>Comb_Hash_Fn</classname> is considered a
+ range-hashing functor. <classname>cc_hash_table</classname>
+ synthesizes a ranged-hash function from <classname>Hash_Fn</classname> and
+ <classname>Comb_Hash_Fn</classname>. The figure below shows an <classname>insert</classname> sequence
+ diagram for this case. The user inserts an element (point A),
+ the container transforms the key into a non-negative integral
+ using the hash functor (points B and C), and transforms the
+ result into a position using the combining functor (points D
+ and E).</para>
+
+ <figure>
+ <title>Insert hash sequence diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert hash sequence diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>If <classname>cc_hash_table</classname>'s
+ hash-functor, <classname>Hash_Fn</classname> is instantiated by <classname>null_type</classname> , then <classname>Comb_Hash_Fn</classname> is taken to be
+ a ranged-hash function. The graphic below shows an <function>insert</function> sequence
+ diagram. The user inserts an element (point A), the container
+ transforms the key into a position using the combining functor
+ (points B and C).</para>
+
+ <figure>
+ <title>Insert hash sequence diagram with a null policy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_hash_range_hashing_seq_diagram2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert hash sequence diagram with a null policy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="hash_policies.implementation.probe">
+ <info><title>
+ Probing tables
+ </title></info>
+ <para><classname>gp_hash_table</classname> is parametrized by
+ <classname>Hash_Fn</classname>, <classname>Probe_Fn</classname>,
+ and <classname>Comb_Probe_Fn</classname>. As before, if
+ <classname>Hash_Fn</classname> and <classname>Probe_Fn</classname>
+ are both <classname>null_type</classname>, then
+ <classname>Comb_Probe_Fn</classname> is a ranged-probe
+ functor. Otherwise, <classname>Hash_Fn</classname> is a hash
+ functor, <classname>Probe_Fn</classname> is a functor for offsets
+ from a hash value, and <classname>Comb_Probe_Fn</classname>
+ transforms a probe sequence into a sequence of positions within
+ the table.</para>
+
+ </section>
+
+ <section xml:id="hash_policies.implementation.predefined">
+ <info><title>
+ Pre-Defined Policies
+ </title></info>
+
+ <para>This library contains some pre-defined classes
+ implementing range-hashing and probing functions:</para>
+
+ <orderedlist>
+ <listitem><para><classname>direct_mask_range_hashing</classname>
+ and <classname>direct_mod_range_hashing</classname>
+ are range-hashing functions based on a bit-mask and a modulo
+ operation, respectively.</para></listitem>
+
+ <listitem><para><classname>linear_probe_fn</classname>, and
+ <classname>quadratic_probe_fn</classname> are
+ a linear probe and a quadratic probe function,
+ respectively.</para></listitem>
+ </orderedlist>
+
+ <para>
+ The graphic below shows the relationships.
+ </para>
+ <figure>
+ <title>Hash policy class diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_hash_policy_cd.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Hash policy class diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ </section>
+
+ </section> <!-- impl -->
+
+ </section>
+
+ <section xml:id="container.hash.details.resize_policies">
+ <info><title>Resize Policies</title></info>
+
+ <section xml:id="resize_policies.general">
+ <info><title>General</title></info>
+
+ <para>Hash-tables, as opposed to trees, do not naturally grow or
+ shrink. It is necessary to specify policies to determine how
+ and when a hash table should change its size. Usually, resize
+ policies can be decomposed into orthogonal policies:</para>
+
+ <orderedlist>
+ <listitem><para>A size policy indicating how a hash table
+ should grow (e.g., it should multiply by powers of
+ 2).</para></listitem>
+
+ <listitem><para>A trigger policy indicating when a hash
+ table should grow (e.g., a load factor is
+ exceeded).</para></listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="resize_policies.size">
+ <info><title>Size Policies</title></info>
+
+
+ <para>Size policies determine how a hash table changes size. These
+ policies are simple, and there are relatively few sensible
+ options. An exponential-size policy (with the initial size and
+ growth factors both powers of 2) works well with a mask-based
+ range-hashing function, and is the
+ hard-wired policy used by Dinkumware. A
+ prime-list based policy works well with a modulo-prime range
+ hashing function and is the hard-wired policy used by SGI's
+ implementation.</para>
+
+ </section>
+
+ <section xml:id="resize_policies.trigger">
+ <info><title>Trigger Policies</title></info>
+
+ <para>Trigger policies determine when a hash table changes size.
+ Following is a description of two policies: load-check
+ policies, and collision-check policies.</para>
+
+ <para>Load-check policies are straightforward. The user specifies
+ two factors, Α<subscript>min</subscript> and
+ Α<subscript>max</subscript>, and the hash table maintains the
+ invariant that</para>
+
+ <para>Α<subscript>min</subscript> ≤ (number of
+ stored elements) / (hash-table size) ≤
+ Α<subscript>max</subscript><remark>load factor min max</remark></para>
+
+ <para>Collision-check policies work in the opposite direction of
+ load-check policies. They focus on keeping the number of
+ collisions moderate and hoping that the size of the table will
+ not grow very large, instead of keeping a moderate load-factor
+ and hoping that the number of collisions will be small. A
+ maximal collision-check policy resizes when the longest
+ probe-sequence grows too large.</para>
+
+ <para>Consider the graphic below. Let the size of the hash table
+ be denoted by m, the length of a probe sequence be denoted by k,
+ and some load factor be denoted by Α. We would like to
+ calculate the minimal length of k, such that if there were Α
+ m elements in the hash table, a probe sequence of length k would
+ be found with probability at most 1/m.</para>
+
+ <figure>
+ <title>Balls and bins</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_balls_and_bins.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Balls and bins</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Denote the probability that a probe sequence of length
+ k appears in bin i by p<subscript>i</subscript>, the
+ length of the probe sequence of bin i by
+ l<subscript>i</subscript>, and assume uniform distribution. Then</para>
+
+
+
+ <equation>
+ <title>
+ Probability of Probe Sequence of Length k
+ </title>
+ <mathphrase>
+ p<subscript>1</subscript> =
+ </mathphrase>
+ </equation>
+
+ <para>P(l<subscript>1</subscript> ≥ k) =</para>
+
+ <para>
+ P(l<subscript>1</subscript> ≥ α ( 1 + k / α - 1) ≤ (a)
+ </para>
+
+ <para>
+ e ^ ( - ( α ( k / α - 1 )<superscript>2</superscript> ) /2)
+ </para>
+
+ <para>where (a) follows from the Chernoff bound (<xref linkend="biblio.motwani95random"/>). To
+ calculate the probability that some bin contains a probe
+ sequence greater than k, we note that the
+ l<subscript>i</subscript> are negatively-dependent
+ (<xref linkend="biblio.dubhashi98neg"/>)
+ . Let
+ I(.) denote the indicator function. Then</para>
+
+ <equation>
+ <title>
+ Probability Probe Sequence in Some Bin
+ </title>
+ <mathphrase>
+ P( exists<subscript>i</subscript> l<subscript>i</subscript> ≥ k ) =
+ </mathphrase>
+ </equation>
+
+ <para>P ( ∑ <subscript>i = 1</subscript><superscript>m</superscript>
+ I(l<subscript>i</subscript> ≥ k) ≥ 1 ) =</para>
+
+ <para>P ( ∑ <subscript>i = 1</subscript><superscript>m</superscript> I (
+ l<subscript>i</subscript> ≥ k ) ≥ m p<subscript>1</subscript> ( 1 + 1 / (m
+ p<subscript>1</subscript>) - 1 ) ) ≤ (a)</para>
+
+ <para>e ^ ( ( - m p<subscript>1</subscript> ( 1 / (m p<subscript>1</subscript>)
+ - 1 ) <superscript>2</superscript> ) / 2 ) ,</para>
+
+ <para>where (a) follows from the fact that the Chernoff bound can
+ be applied to negatively-dependent variables (<xref
+ linkend="biblio.dubhashi98neg"/>). Inserting the first probability
+ equation into the second one, and equating with 1/m, we
+ obtain</para>
+
+
+ <para>k ~ √ ( 2 α ln 2 m ln(m) )
+ ) .</para>
+
+ </section>
+
+ <section xml:id="resize_policies.impl">
+ <info><title>Implementation</title></info>
+
+ <para>This sub-subsection describes the implementation of the
+ above in this library. It first describes resize policies and
+ their decomposition into trigger and size policies, then
+ describes pre-defined classes, and finally discusses controlled
+ access the policies' internals.</para>
+
+ <section xml:id="resize_policies.impl.decomposition">
+ <info><title>Decomposition</title></info>
+
+
+ <para>Each hash-based container is parametrized by a
+ <classname>Resize_Policy</classname> parameter; the container derives
+ <classname>public</classname>ly from <classname>Resize_Policy</classname>. For
+ example:</para>
+ <programlisting>
+ cc_hash_table<typename Key,
+ typename Mapped,
+ ...
+ typename Resize_Policy
+ ...> : public Resize_Policy
+ </programlisting>
+
+ <para>As a container object is modified, it continuously notifies
+ its <classname>Resize_Policy</classname> base of internal changes
+ (e.g., collisions encountered and elements being
+ inserted). It queries its <classname>Resize_Policy</classname> base whether
+ it needs to be resized, and if so, to what size.</para>
+
+ <para>The graphic below shows a (possible) sequence diagram
+ of an insert operation. The user inserts an element; the hash
+ table notifies its resize policy that a search has started
+ (point A); in this case, a single collision is encountered -
+ the table notifies its resize policy of this (point B); the
+ container finally notifies its resize policy that the search
+ has ended (point C); it then queries its resize policy whether
+ a resize is needed, and if so, what is the new size (points D
+ to G); following the resize, it notifies the policy that a
+ resize has completed (point H); finally, the element is
+ inserted, and the policy notified (point I).</para>
+
+ <figure>
+ <title>Insert resize sequence diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram1.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert resize sequence diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>In practice, a resize policy can be usually orthogonally
+ decomposed to a size policy and a trigger policy. Consequently,
+ the library contains a single class for instantiating a resize
+ policy: <classname>hash_standard_resize_policy</classname>
+ is parametrized by <classname>Size_Policy</classname> and
+ <classname>Trigger_Policy</classname>, derives <classname>public</classname>ly from
+ both, and acts as a standard delegate (<xref linkend="biblio.gof"/>)
+ to these policies.</para>
+
+ <para>The two graphics immediately below show sequence diagrams
+ illustrating the interaction between the standard resize policy
+ and its trigger and size policies, respectively.</para>
+
+ <figure>
+ <title>Standard resize policy trigger sequence
+ diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram2.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Standard resize policy trigger sequence
+ diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Standard resize policy size sequence
+ diagram</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_insert_resize_sequence_diagram3.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Standard resize policy size sequence
+ diagram</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ </section>
+
+ <section xml:id="resize_policies.impl.predefined">
+ <info><title>Predefined Policies</title></info>
+ <para>The library includes the following
+ instantiations of size and trigger policies:</para>
+
+ <orderedlist>
+ <listitem><para><classname>hash_load_check_resize_trigger</classname>
+ implements a load check trigger policy.</para></listitem>
+
+ <listitem><para><classname>cc_hash_max_collision_check_resize_trigger</classname>
+ implements a collision check trigger policy.</para></listitem>
+
+ <listitem><para><classname>hash_exponential_size_policy</classname>
+ implements an exponential-size policy (which should be used
+ with mask range hashing).</para></listitem>
+
+ <listitem><para><classname>hash_prime_size_policy</classname>
+ implementing a size policy based on a sequence of primes
+ (which should
+ be used with mod range hashing</para></listitem>
+ </orderedlist>
+
+ <para>The graphic below gives an overall picture of the resize-related
+ classes. <classname>basic_hash_table</classname>
+ is parametrized by <classname>Resize_Policy</classname>, which it subclasses
+ publicly. This class is currently instantiated only by <classname>hash_standard_resize_policy</classname>.
+ <classname>hash_standard_resize_policy</classname>
+ itself is parametrized by <classname>Trigger_Policy</classname> and
+ <classname>Size_Policy</classname>. Currently, <classname>Trigger_Policy</classname> is
+ instantiated by <classname>hash_load_check_resize_trigger</classname>,
+ or <classname>cc_hash_max_collision_check_resize_trigger</classname>;
+ <classname>Size_Policy</classname> is instantiated by <classname>hash_exponential_size_policy</classname>,
+ or <classname>hash_prime_size_policy</classname>.</para>
+
+ </section>
+
+ <section xml:id="resize_policies.impl.internals">
+ <info><title>Controling Access to Internals</title></info>
+
+ <para>There are cases where (controlled) access to resize
+ policies' internals is beneficial. E.g., it is sometimes
+ useful to query a hash-table for the table's actual size (as
+ opposed to its <function>size()</function> - the number of values it
+ currently holds); it is sometimes useful to set a table's
+ initial size, externally resize it, or change load factors.</para>
+
+ <para>Clearly, supporting such methods both decreases the
+ encapsulation of hash-based containers, and increases the
+ diversity between different associative-containers' interfaces.
+ Conversely, omitting such methods can decrease containers'
+ flexibility.</para>
+
+ <para>In order to avoid, to the extent possible, the above
+ conflict, the hash-based containers themselves do not address
+ any of these questions; this is deferred to the resize policies,
+ which are easier to change or replace. Thus, for example,
+ neither <classname>cc_hash_table</classname> nor
+ <classname>gp_hash_table</classname>
+ contain methods for querying the actual size of the table; this
+ is deferred to <classname>hash_standard_resize_policy</classname>.</para>
+
+ <para>Furthermore, the policies themselves are parametrized by
+ template arguments that determine the methods they support
+ (
+ <xref linkend="biblio.alexandrescu01modern"/>
+ shows techniques for doing so). <classname>hash_standard_resize_policy</classname>
+ is parametrized by <classname>External_Size_Access</classname> that
+ determines whether it supports methods for querying the actual
+ size of the table or resizing it. <classname>hash_load_check_resize_trigger</classname>
+ is parametrized by <classname>External_Load_Access</classname> that
+ determines whether it supports methods for querying or
+ modifying the loads. <classname>cc_hash_max_collision_check_resize_trigger</classname>
+ is parametrized by <classname>External_Load_Access</classname> that
+ determines whether it supports methods for querying the
+ load.</para>
+
+ <para>Some operations, for example, resizing a container at
+ run time, or changing the load factors of a load-check trigger
+ policy, require the container itself to resize. As mentioned
+ above, the hash-based containers themselves do not contain
+ these types of methods, only their resize policies.
+ Consequently, there must be some mechanism for a resize policy
+ to manipulate the hash-based container. As the hash-based
+ container is a subclass of the resize policy, this is done
+ through virtual methods. Each hash-based container has a
+ <classname>private</classname> <classname>virtual</classname> method:</para>
+ <programlisting>
+ virtual void
+ do_resize
+ (size_type new_size);
+ </programlisting>
+
+ <para>which resizes the container. Implementations of
+ <classname>Resize_Policy</classname> can export public methods for resizing
+ the container externally; these methods internally call
+ <classname>do_resize</classname> to resize the table.</para>
+
+
+ </section>
+
+ </section>
+
+
+ </section> <!-- resize policies -->
+
+ <section xml:id="container.hash.details.policy_interaction">
+ <info><title>Policy Interactions</title></info>
+ <para>
+ </para>
+ <para>Hash-tables are unfortunately especially susceptible to
+ choice of policies. One of the more complicated aspects of this
+ is that poor combinations of good policies can form a poor
+ container. Following are some considerations.</para>
+
+ <section xml:id="policy_interaction.probesizetrigger">
+ <info><title>probe/size/trigger</title></info>
+
+ <para>Some combinations do not work well for probing containers.
+ For example, combining a quadratic probe policy with an
+ exponential size policy can yield a poor container: when an
+ element is inserted, a trigger policy might decide that there
+ is no need to resize, as the table still contains unused
+ entries; the probe sequence, however, might never reach any of
+ the unused entries.</para>
+
+ <para>Unfortunately, this library cannot detect such problems at
+ compilation (they are halting reducible). It therefore defines
+ an exception class <classname>insert_error</classname> to throw an
+ exception in this case.</para>
+
+ </section>
+
+ <section xml:id="policy_interaction.hashtrigger">
+ <info><title>hash/trigger</title></info>
+
+ <para>Some trigger policies are especially susceptible to poor
+ hash functions. Suppose, as an extreme case, that the hash
+ function transforms each key to the same hash value. After some
+ inserts, a collision detecting policy will always indicate that
+ the container needs to grow.</para>
+
+ <para>The library, therefore, by design, limits each operation to
+ one resize. For each <classname>insert</classname>, for example, it queries
+ only once whether a resize is needed.</para>
+
+ </section>
+
+ <section xml:id="policy_interaction.eqstorehash">
+ <info><title>equivalence functors/storing hash values/hash</title></info>
+
+ <para><classname>cc_hash_table</classname> and
+ <classname>gp_hash_table</classname> are
+ parametrized by an equivalence functor and by a
+ <classname>Store_Hash</classname> parameter. If the latter parameter is
+ <classname>true</classname>, then the container stores with each entry
+ a hash value, and uses this value in case of collisions to
+ determine whether to apply a hash value. This can lower the
+ cost of collision for some types, but increase the cost of
+ collisions for other types.</para>
+
+ <para>If a ranged-hash function or ranged probe function is
+ directly supplied, however, then it makes no sense to store the
+ hash value with each entry. This library's container will
+ fail at compilation, by design, if this is attempted.</para>
+
+ </section>
+
+ <section xml:id="policy_interaction.sizeloadtrigger">
+ <info><title>size/load-check trigger</title></info>
+
+ <para>Assume a size policy issues an increasing sequence of sizes
+ a, a q, a q<superscript>1</superscript>, a q<superscript>2</superscript>, ... For
+ example, an exponential size policy might issue the sequence of
+ sizes 8, 16, 32, 64, ...</para>
+
+ <para>If a load-check trigger policy is used, with loads
+ α<subscript>min</subscript> and α<subscript>max</subscript>,
+ respectively, then it is a good idea to have:</para>
+
+ <orderedlist>
+ <listitem><para>α<subscript>max</subscript> ~ 1 / q</para></listitem>
+
+ <listitem><para>α<subscript>min</subscript> < 1 / (2 q)</para></listitem>
+ </orderedlist>
+
+ <para>This will ensure that the amortized hash cost of each
+ modifying operation is at most approximately 3.</para>
+
+ <para>α<subscript>min</subscript> ~ α<subscript>max</subscript> is, in
+ any case, a bad choice, and α<subscript>min</subscript> >
+ α <subscript>max</subscript> is horrendous.</para>
+
+ </section>
+
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- hash -->
+
+ <!-- tree -->
+ <section xml:id="pbds.design.container.tree">
+ <info><title>tree</title></info>
+
+ <section xml:id="container.tree.interface">
+ <info><title>Interface</title></info>
+
+ <para>The tree-based container has the following declaration:</para>
+ <programlisting>
+ template<
+ typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less<Key>,
+ typename Tag = rb_tree_tag,
+ template<
+ typename Const_Node_Iterator,
+ typename Node_Iterator,
+ typename Cmp_Fn_,
+ typename Allocator_>
+ class Node_Update = null_node_update,
+ typename Allocator = std::allocator<char> >
+ class tree;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem>
+ <para><classname>Key</classname> is the key type.</para></listitem>
+
+ <listitem>
+ <para><classname>Mapped</classname> is the mapped-policy.</para></listitem>
+
+ <listitem>
+ <para><classname>Cmp_Fn</classname> is a key comparison functor</para></listitem>
+
+ <listitem>
+ <para><classname>Tag</classname> specifies which underlying data structure
+ to use.</para></listitem>
+
+ <listitem>
+ <para><classname>Node_Update</classname> is a policy for updating node
+ invariants.</para></listitem>
+
+ <listitem>
+ <para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The <classname>Tag</classname> parameter specifies which underlying
+ data structure to use. Instantiating it by <classname>rb_tree_tag</classname>, <classname>splay_tree_tag</classname>, or
+ <classname>ov_tree_tag</classname>,
+ specifies an underlying red-black tree, splay tree, or
+ ordered-vector tree, respectively; any other tag is illegal.
+ Note that containers based on the former two contain more types
+ and methods than the latter (e.g.,
+ <classname>reverse_iterator</classname> and <classname>rbegin</classname>), and different
+ exception and invalidation guarantees.</para>
+
+ </section>
+
+ <section xml:id="container.tree.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.tree.node">
+ <info><title>Node Invariants</title></info>
+
+
+ <para>Consider the two trees in the graphic below, labels A and B. The first
+ is a tree of floats; the second is a tree of pairs, each
+ signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of
+ these trees can support the usual queries: the first can easily
+ search for <classname>0.4</classname>; the second can easily search for
+ <classname>std::make_pair(10, 41)</classname>.</para>
+
+ <para>Each of these trees can efficiently support other queries.
+ The first can efficiently determine that the 2rd key in the
+ tree is <constant>0.3</constant>; the second can efficiently determine
+ whether any of its intervals overlaps
+ <programlisting>std::make_pair(29,42)</programlisting> (useful in geometric
+ applications or distributed file systems with leases, for
+ example). It should be noted that an <classname>std::set</classname> can
+ only solve these types of problems with linear complexity.</para>
+
+ <para>In order to do so, each tree stores some metadata in
+ each node, and maintains node invariants (see <xref linkend="biblio.clrs2001"/>.) The first stores in
+ each node the size of the sub-tree rooted at the node; the
+ second stores at each node the maximal endpoint of the
+ intervals at the sub-tree rooted at the node.</para>
+
+ <figure>
+ <title>Tree node invariants</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_node_invariants.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Tree node invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Supporting such trees is difficult for a number of
+ reasons:</para>
+
+ <orderedlist>
+ <listitem><para>There must be a way to specify what a node's metadata
+ should be (if any).</para></listitem>
+
+ <listitem><para>Various operations can invalidate node
+ invariants. The graphic below shows how a right rotation,
+ performed on A, results in B, with nodes x and y having
+ corrupted invariants (the grayed nodes in C). The graphic shows
+ how an insert, performed on D, results in E, with nodes x and y
+ having corrupted invariants (the grayed nodes in F). It is not
+ feasible to know outside the tree the effect of an operation on
+ the nodes of the tree.</para></listitem>
+
+ <listitem><para>The search paths of standard associative containers are
+ defined by comparisons between keys, and not through
+ metadata.</para></listitem>
+
+ <listitem><para>It is not feasible to know in advance which methods trees
+ can support. Besides the usual <classname>find</classname> method, the
+ first tree can support a <classname>find_by_order</classname> method, while
+ the second can support an <classname>overlaps</classname> method.</para></listitem>
+ </orderedlist>
+
+ <figure>
+ <title>Tree node invalidation</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_node_invalidations.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Tree node invalidation</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>These problems are solved by a combination of two means:
+ node iterators, and template-template node updater
+ parameters.</para>
+
+ <section xml:id="container.tree.node.iterators">
+ <info><title>Node Iterators</title></info>
+
+
+ <para>Each tree-based container defines two additional iterator
+ types, <classname>const_node_iterator</classname>
+ and <classname>node_iterator</classname>.
+ These iterators allow descending from a node to one of its
+ children. Node iterator allow search paths different than those
+ determined by the comparison functor. The <classname>tree</classname>
+ supports the methods:</para>
+ <programlisting>
+ const_node_iterator
+ node_begin() const;
+
+ node_iterator
+ node_begin();
+
+ const_node_iterator
+ node_end() const;
+
+ node_iterator
+ node_end();
+ </programlisting>
+
+ <para>The first pairs return node iterators corresponding to the
+ root node of the tree; the latter pair returns node iterators
+ corresponding to a just-after-leaf node.</para>
+ </section>
+
+ <section xml:id="container.tree.node.updator">
+ <info><title>Node Updator</title></info>
+
+ <para>The tree-based containers are parametrized by a
+ <classname>Node_Update</classname> template-template parameter. A
+ tree-based container instantiates
+ <classname>Node_Update</classname> to some
+ <classname>node_update</classname> class, and publicly subclasses
+ <classname>node_update</classname>. The graphic below shows this
+ scheme, as well as some predefined policies (which are explained
+ below).</para>
+
+ <figure>
+ <title>A tree and its update policy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_node_updator_policy_cd.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A tree and its update policy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para><classname>node_update</classname> (an instantiation of
+ <classname>Node_Update</classname>) must define <classname>metadata_type</classname> as
+ the type of metadata it requires. For order statistics,
+ e.g., <classname>metadata_type</classname> might be <classname>size_t</classname>.
+ The tree defines within each node a <classname>metadata_type</classname>
+ object.</para>
+
+ <para><classname>node_update</classname> must also define the following method
+ for restoring node invariants:</para>
+ <programlisting>
+ void
+ operator()(node_iterator nd_it, const_node_iterator end_nd_it)
+ </programlisting>
+
+ <para>In this method, <varname>nd_it</varname> is a
+ <classname>node_iterator</classname> corresponding to a node whose
+ A) all descendants have valid invariants, and B) its own
+ invariants might be violated; <classname>end_nd_it</classname> is
+ a <classname>const_node_iterator</classname> corresponding to a
+ just-after-leaf node. This method should correct the node
+ invariants of the node pointed to by
+ <classname>nd_it</classname>. For example, say node x in the
+ graphic below label A has an invalid invariant, but its' children,
+ y and z have valid invariants. After the invocation, all three
+ nodes should have valid invariants, as in label B.</para>
+
+
+ <figure>
+ <title>Restoring node invariants</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_restoring_node_invariants.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Restoring node invariants</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>When a tree operation might invalidate some node invariant,
+ it invokes this method in its <classname>node_update</classname> base to
+ restore the invariant. For example, the graphic below shows
+ an <function>insert</function> operation (point A); the tree performs some
+ operations, and calls the update functor three times (points B,
+ C, and D). (It is well known that any <function>insert</function>,
+ <function>erase</function>, <function>split</function> or <function>join</function>, can restore
+ all node invariants by a small number of node invariant updates (<xref linkend="biblio.clrs2001"/>)
+ .</para>
+
+ <figure>
+ <title>Insert update sequence</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Insert update sequence</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>To complete the description of the scheme, three questions
+ need to be answered:</para>
+
+ <orderedlist>
+ <listitem><para>How can a tree which supports order statistics define a
+ method such as <classname>find_by_order</classname>?</para></listitem>
+
+ <listitem><para>How can the node updater base access methods of the
+ tree?</para></listitem>
+
+ <listitem><para>How can the following cyclic dependency be resolved?
+ <classname>node_update</classname> is a base class of the tree, yet it
+ uses node iterators defined in the tree (its child).</para></listitem>
+ </orderedlist>
+
+ <para>The first two questions are answered by the fact that
+ <classname>node_update</classname> (an instantiation of
+ <classname>Node_Update</classname>) is a <emphasis>public</emphasis> base class
+ of the tree. Consequently:</para>
+
+ <orderedlist>
+ <listitem><para>Any public methods of
+ <classname>node_update</classname> are automatically methods of
+ the tree (<xref linkend="biblio.alexandrescu01modern"/>).
+ Thus an order-statistics node updater,
+ <classname>tree_order_statistics_node_update</classname> defines
+ the <function>find_by_order</function> method; any tree
+ instantiated by this policy consequently supports this method as
+ well.</para></listitem>
+
+ <listitem><para>In C++, if a base class declares a method as
+ <literal>virtual</literal>, it is
+ <literal>virtual</literal> in its subclasses. If
+ <classname>node_update</classname> needs to access one of the
+ tree's methods, say the member function
+ <function>end</function>, it simply declares that method as
+ <literal>virtual</literal> abstract.</para></listitem>
+ </orderedlist>
+
+ <para>The cyclic dependency is solved through template-template
+ parameters. <classname>Node_Update</classname> is parametrized by
+ the tree's node iterators, its comparison functor, and its
+ allocator type. Thus, instantiations of
+ <classname>Node_Update</classname> have all information
+ required.</para>
+
+ <para>This library assumes that constructing a metadata object and
+ modifying it are exception free. Suppose that during some method,
+ say <classname>insert</classname>, a metadata-related operation
+ (e.g., changing the value of a metadata) throws an exception. Ack!
+ Rolling back the method is unusually complex.</para>
+
+ <para>Previously, a distinction was made between redundant
+ policies and null policies. Node invariants show a
+ case where null policies are required.</para>
+
+ <para>Assume a regular tree is required, one which need not
+ support order statistics or interval overlap queries.
+ Seemingly, in this case a redundant policy - a policy which
+ doesn't affect nodes' contents would suffice. This, would lead
+ to the following drawbacks:</para>
+
+ <orderedlist>
+ <listitem><para>Each node would carry a useless metadata object, wasting
+ space.</para></listitem>
+
+ <listitem><para>The tree cannot know if its
+ <classname>Node_Update</classname> policy actually modifies a
+ node's metadata (this is halting reducible). In the graphic
+ below, assume the shaded node is inserted. The tree would have
+ to traverse the useless path shown to the root, applying
+ redundant updates all the way.</para></listitem>
+ </orderedlist>
+ <figure>
+ <title>Useless update path</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_rationale_null_node_updator.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Useless update path</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>A null policy class, <classname>null_node_update</classname>
+ solves both these problems. The tree detects that node
+ invariants are irrelevant, and defines all accordingly.</para>
+
+ </section>
+
+ </section>
+
+ <section xml:id="container.tree.details.split">
+ <info><title>Split and Join</title></info>
+
+ <para>Tree-based containers support split and join methods.
+ It is possible to split a tree so that it passes
+ all nodes with keys larger than a given key to a different
+ tree. These methods have the following advantages over the
+ alternative of externally inserting to the destination
+ tree and erasing from the source tree:</para>
+
+ <orderedlist>
+ <listitem><para>These methods are efficient - red-black trees are split
+ and joined in poly-logarithmic complexity; ordered-vector
+ trees are split and joined at linear complexity. The
+ alternatives have super-linear complexity.</para></listitem>
+
+ <listitem><para>Aside from orders of growth, these operations perform
+ few allocations and de-allocations. For red-black trees, allocations are not performed,
+ and the methods are exception-free. </para></listitem>
+ </orderedlist>
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- tree -->
+
+ <!-- trie -->
+ <section xml:id="pbds.design.container.trie">
+ <info><title>Trie</title></info>
+
+ <section xml:id="container.trie.interface">
+ <info><title>Interface</title></info>
+
+ <para>The trie-based container has the following declaration:</para>
+ <programlisting>
+ template<typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less<Key>,
+ typename Tag = pat_trie_tag,
+ template<typename Const_Node_Iterator,
+ typename Node_Iterator,
+ typename E_Access_Traits_,
+ typename Allocator_>
+ class Node_Update = null_node_update,
+ typename Allocator = std::allocator<char> >
+ class trie;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem><para><classname>Key</classname> is the key type.</para></listitem>
+
+ <listitem><para><classname>Mapped</classname> is the mapped-policy.</para></listitem>
+
+ <listitem><para><classname>E_Access_Traits</classname> is described in below.</para></listitem>
+
+ <listitem><para><classname>Tag</classname> specifies which underlying data structure
+ to use, and is described shortly.</para></listitem>
+
+ <listitem><para><classname>Node_Update</classname> is a policy for updating node
+ invariants. This is described below.</para></listitem>
+
+ <listitem><para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The <classname>Tag</classname> parameter specifies which underlying
+ data structure to use. Instantiating it by <classname>pat_trie_tag</classname>, specifies an
+ underlying PATRICIA trie (explained shortly); any other tag is
+ currently illegal.</para>
+
+ <para>Following is a description of a (PATRICIA) trie
+ (this implementation follows <xref linkend="biblio.okasaki98mereable"/> and
+ <xref linkend="biblio.filliatre2000ptset"/>).
+ </para>
+
+ <para>A (PATRICIA) trie is similar to a tree, but with the
+ following differences:</para>
+
+ <orderedlist>
+ <listitem><para>It explicitly views keys as a sequence of elements.
+ E.g., a trie can view a string as a sequence of
+ characters; a trie can view a number as a sequence of
+ bits.</para></listitem>
+
+ <listitem><para>It is not (necessarily) binary. Each node has fan-out n
+ + 1, where n is the number of distinct
+ elements.</para></listitem>
+
+ <listitem><para>It stores values only at leaf nodes.</para></listitem>
+
+ <listitem><para>Internal nodes have the properties that A) each has at
+ least two children, and B) each shares the same prefix with
+ any of its descendant.</para></listitem>
+ </orderedlist>
+
+ <para>A (PATRICIA) trie has some useful properties:</para>
+
+ <orderedlist>
+ <listitem><para>It can be configured to use large node fan-out, giving it
+ very efficient find performance (albeit at insertion
+ complexity and size).</para></listitem>
+
+ <listitem><para>It works well for common-prefix keys.</para></listitem>
+
+ <listitem><para>It can support efficiently queries such as which
+ keys match a certain prefix. This is sometimes useful in file
+ systems and routers, and for "type-ahead" aka predictive text matching
+ on mobile devices.</para></listitem>
+ </orderedlist>
+
+
+ </section>
+
+ <section xml:id="container.trie.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.trie.details.etraits">
+ <info><title>Element Access Traits</title></info>
+
+ <para>A trie inherently views its keys as sequences of elements.
+ For example, a trie can view a string as a sequence of
+ characters. A trie needs to map each of n elements to a
+ number in {0, n - 1}. For example, a trie can map a
+ character <varname>c</varname> to
+ <programlisting>static_cast<size_t>(c)</programlisting>.</para>
+
+ <para>Seemingly, then, a trie can assume that its keys support
+ (const) iterators, and that the <classname>value_type</classname> of this
+ iterator can be cast to a <classname>size_t</classname>. There are several
+ reasons, though, to decouple the mechanism by which the trie
+ accesses its keys' elements from the trie:</para>
+
+ <orderedlist>
+ <listitem><para>In some cases, the numerical value of an element is
+ inappropriate. Consider a trie storing DNA strings. It is
+ logical to use a trie with a fan-out of 5 = 1 + |{'A', 'C',
+ 'G', 'T'}|. This requires mapping 'T' to 3, though.</para></listitem>
+
+ <listitem><para>In some cases the keys' iterators are different than what
+ is needed. For example, a trie can be used to search for
+ common suffixes, by using strings'
+ <classname>reverse_iterator</classname>. As another example, a trie mapping
+ UNICODE strings would have a huge fan-out if each node would
+ branch on a UNICODE character; instead, one can define an
+ iterator iterating over 8-bit (or less) groups.</para></listitem>
+ </orderedlist>
+
+ <para>trie is,
+ consequently, parametrized by <classname>E_Access_Traits</classname> -
+ traits which instruct how to access sequences' elements.
+ <classname>string_trie_e_access_traits</classname>
+ is a traits class for strings. Each such traits define some
+ types, like:</para>
+ <programlisting>
+ typename E_Access_Traits::const_iterator
+ </programlisting>
+
+ <para>is a const iterator iterating over a key's elements. The
+ traits class must also define methods for obtaining an iterator
+ to the first and last element of a key.</para>
+
+ <para>The graphic below shows a
+ (PATRICIA) trie resulting from inserting the words: "I wish
+ that I could ever see a poem lovely as a trie" (which,
+ unfortunately, does not rhyme).</para>
+
+ <para>The leaf nodes contain values; each internal node contains
+ two <classname>typename E_Access_Traits::const_iterator</classname>
+ objects, indicating the maximal common prefix of all keys in
+ the sub-tree. For example, the shaded internal node roots a
+ sub-tree with leafs "a" and "as". The maximal common prefix is
+ "a". The internal node contains, consequently, to const
+ iterators, one pointing to <varname>'a'</varname>, and the other to
+ <varname>'s'</varname>.</para>
+
+ <figure>
+ <title>A PATRICIA trie</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_pat_trie.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A PATRICIA trie</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section xml:id="container.trie.details.node">
+ <info><title>Node Invariants</title></info>
+
+ <para>Trie-based containers support node invariants, as do
+ tree-based containers. There are two minor
+ differences, though, which, unfortunately, thwart sharing them
+ sharing the same node-updating policies:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>A trie's <classname>Node_Update</classname> template-template
+ parameter is parametrized by <classname>E_Access_Traits</classname>, while
+ a tree's <classname>Node_Update</classname> template-template parameter is
+ parametrized by <classname>Cmp_Fn</classname>.</para></listitem>
+
+ <listitem><para>Tree-based containers store values in all nodes, while
+ trie-based containers (at least in this implementation) store
+ values in leafs.</para></listitem>
+ </orderedlist>
+
+ <para>The graphic below shows the scheme, as well as some predefined
+ policies (which are explained below).</para>
+
+ <figure>
+ <title>A trie and its update policy</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A trie and its update policy</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>This library offers the following pre-defined trie node
+ updating policies:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ <classname>trie_order_statistics_node_update</classname>
+ supports order statistics.
+ </para>
+ </listitem>
+
+ <listitem><para><classname>trie_prefix_search_node_update</classname>
+ supports searching for ranges that match a given prefix.</para></listitem>
+
+ <listitem><para><classname>null_node_update</classname>
+ is the null node updater.</para></listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="container.trie.details.split">
+ <info><title>Split and Join</title></info>
+ <para>Trie-based containers support split and join methods; the
+ rationale is equal to that of tree-based containers supporting
+ these methods.</para>
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- trie -->
+
+ <!-- list_update -->
+ <section xml:id="pbds.design.container.list">
+ <info><title>List</title></info>
+
+ <section xml:id="container.list.interface">
+ <info><title>Interface</title></info>
+
+ <para>The list-based container has the following declaration:</para>
+ <programlisting>
+ template<typename Key,
+ typename Mapped,
+ typename Eq_Fn = std::equal_to<Key>,
+ typename Update_Policy = move_to_front_lu_policy<>,
+ typename Allocator = std::allocator<char> >
+ class list_update;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ <classname>Key</classname> is the key type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Mapped</classname> is the mapped-policy.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Eq_Fn</classname> is a key equivalence functor.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Update_Policy</classname> is a policy updating positions in
+ the list based on access patterns. It is described in the
+ following subsection.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <classname>Allocator</classname> is an allocator type.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>A list-based associative container is a container that
+ stores elements in a linked-list. It does not order the elements
+ by any particular order related to the keys. List-based
+ containers are primarily useful for creating "multimaps". In fact,
+ list-based containers are designed in this library expressly for
+ this purpose.</para>
+
+ <para>List-based containers might also be useful for some rare
+ cases, where a key is encapsulated to the extent that only
+ key-equivalence can be tested. Hash-based containers need to know
+ how to transform a key into a size type, and tree-based containers
+ need to know if some key is larger than another. List-based
+ associative containers, conversely, only need to know if two keys
+ are equivalent.</para>
+
+ <para>Since a list-based associative container does not order
+ elements by keys, is it possible to order the list in some
+ useful manner? Remarkably, many on-line competitive
+ algorithms exist for reordering lists to reflect access
+ prediction. (See <xref linkend="biblio.motwani95random"/> and <xref linkend="biblio.andrew04mtf"/>).
+ </para>
+
+ </section>
+
+ <section xml:id="container.list.details">
+ <info><title>Details</title></info>
+ <para>
+ </para>
+ <section xml:id="container.list.details.ds">
+ <info><title>Underlying Data Structure</title></info>
+
+ <para>The graphic below shows a
+ simple list of integer keys. If we search for the integer 6, we
+ are paying an overhead: the link with key 6 is only the fifth
+ link; if it were the first link, it could be accessed
+ faster.</para>
+
+ <figure>
+ <title>A simple list</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_simple_list.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>A simple list</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>List-update algorithms reorder lists as elements are
+ accessed. They try to determine, by the access history, which
+ keys to move to the front of the list. Some of these algorithms
+ require adding some metadata alongside each entry.</para>
+
+ <para>For example, in the graphic below label A shows the counter
+ algorithm. Each node contains both a key and a count metadata
+ (shown in bold). When an element is accessed (e.g. 6) its count is
+ incremented, as shown in label B. If the count reaches some
+ predetermined value, say 10, as shown in label C, the count is set
+ to 0 and the node is moved to the front of the list, as in label
+ D.
+ </para>
+
+ <figure>
+ <title>The counter algorithm</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_list_update.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>The counter algorithm</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ </section>
+
+ <section xml:id="container.list.details.policies">
+ <info><title>Policies</title></info>
+
+ <para>this library allows instantiating lists with policies
+ implementing any algorithm moving nodes to the front of the
+ list (policies implementing algorithms interchanging nodes are
+ unsupported).</para>
+
+ <para>Associative containers based on lists are parametrized by a
+ <classname>Update_Policy</classname> parameter. This parameter defines the
+ type of metadata each node contains, how to create the
+ metadata, and how to decide, using this metadata, whether to
+ move a node to the front of the list. A list-based associative
+ container object derives (publicly) from its update policy.
+ </para>
+
+ <para>An instantiation of <classname>Update_Policy</classname> must define
+ internally <classname>update_metadata</classname> as the metadata it
+ requires. Internally, each node of the list contains, besides
+ the usual key and data, an instance of <classname>typename
+ Update_Policy::update_metadata</classname>.</para>
+
+ <para>An instantiation of <classname>Update_Policy</classname> must define
+ internally two operators:</para>
+ <programlisting>
+ update_metadata
+ operator()();
+
+ bool
+ operator()(update_metadata &);
+ </programlisting>
+
+ <para>The first is called by the container object, when creating a
+ new node, to create the node's metadata. The second is called
+ by the container object, when a node is accessed (
+ when a find operation's key is equivalent to the key of the
+ node), to determine whether to move the node to the front of
+ the list.
+ </para>
+
+ <para>The library contains two predefined implementations of
+ list-update policies. The first
+ is <classname>lu_counter_policy</classname>, which implements the
+ counter algorithm described above. The second is
+ <classname>lu_move_to_front_policy</classname>,
+ which unconditionally move an accessed element to the front of
+ the list. The latter type is very useful in this library,
+ since there is no need to associate metadata with each element.
+ (See <xref linkend="biblio.andrew04mtf"/>
+ </para>
+
+ </section>
+
+ <section xml:id="container.list.details.mapped">
+ <info><title>Use in Multimaps</title></info>
+
+ <para>In this library, there are no equivalents for the standard's
+ multimaps and multisets; instead one uses an associative
+ container mapping primary keys to secondary keys.</para>
+
+ <para>List-based containers are especially useful as associative
+ containers for secondary keys. In fact, they are implemented
+ here expressly for this purpose.</para>
+
+ <para>To begin with, these containers use very little per-entry
+ structure memory overhead, since they can be implemented as
+ singly-linked lists. (Arrays use even lower per-entry memory
+ overhead, but they are less flexible in moving around entries,
+ and have weaker invalidation guarantees).</para>
+
+ <para>More importantly, though, list-based containers use very
+ little per-container memory overhead. The memory overhead of an
+ empty list-based container is practically that of a pointer.
+ This is important for when they are used as secondary
+ associative-containers in situations where the average ratio of
+ secondary keys to primary keys is low (or even 1).</para>
+
+ <para>In order to reduce the per-container memory overhead as much
+ as possible, they are implemented as closely as possible to
+ singly-linked lists.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ List-based containers do not store internally the number
+ of values that they hold. This means that their <function>size</function>
+ method has linear complexity (just like <classname>std::list</classname>).
+ Note that finding the number of equivalent-key values in a
+ standard multimap also has linear complexity (because it must be
+ done, via <function>std::distance</function> of the
+ multimap's <function>equal_range</function> method), but usually with
+ higher constants.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Most associative-container objects each hold a policy
+ object (a hash-based container object holds a
+ hash functor). List-based containers, conversely, only have
+ class-wide policy objects.
+ </para>
+ </listitem>
+ </orderedlist>
+
+
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- list -->
+
+
+ <!-- priority_queue -->
+ <section xml:id="pbds.design.container.priority_queue">
+ <info><title>Priority Queue</title></info>
+
+ <section xml:id="container.priority_queue.interface">
+ <info><title>Interface</title></info>
+
+ <para>The priority queue container has the following
+ declaration:
+ </para>
+ <programlisting>
+ template<typename Value_Type,
+ typename Cmp_Fn = std::less<Value_Type>,
+ typename Tag = pairing_heap_tag,
+ typename Allocator = std::allocator<char > >
+ class priority_queue;
+ </programlisting>
+
+ <para>The parameters have the following meaning:</para>
+
+ <orderedlist>
+ <listitem><para><classname>Value_Type</classname> is the value type.</para></listitem>
+
+ <listitem><para><classname>Cmp_Fn</classname> is a value comparison functor</para></listitem>
+
+ <listitem><para><classname>Tag</classname> specifies which underlying data structure
+ to use.</para></listitem>
+
+ <listitem><para><classname>Allocator</classname> is an allocator
+ type.</para></listitem>
+ </orderedlist>
+
+ <para>The <classname>Tag</classname> parameter specifies which underlying
+ data structure to use. Instantiating it by<classname>pairing_heap_tag</classname>,<classname>binary_heap_tag</classname>,
+ <classname>binomial_heap_tag</classname>,
+ <classname>rc_binomial_heap_tag</classname>,
+ or <classname>thin_heap_tag</classname>,
+ specifies, respectively,
+ an underlying pairing heap (<xref linkend="biblio.fredman86pairing"/>),
+ binary heap (<xref linkend="biblio.clrs2001"/>),
+ binomial heap (<xref linkend="biblio.clrs2001"/>),
+ a binomial heap with a redundant binary counter (<xref linkend="biblio.maverik_lowerbounds"/>),
+ or a thin heap (<xref linkend="biblio.kt99fat_heaps"/>).
+ </para>
+
+ <para>
+ As mentioned in the tutorial,
+ <classname>__gnu_pbds::priority_queue</classname> shares most of the
+ same interface with <classname>std::priority_queue</classname>.
+ E.g. if <varname>q</varname> is a priority queue of type
+ <classname>Q</classname>, then <function>q.top()</function> will
+ return the "largest" value in the container (according to
+ <classname>typename
+ Q::cmp_fn</classname>). <classname>__gnu_pbds::priority_queue</classname>
+ has a larger (and very slightly different) interface than
+ <classname>std::priority_queue</classname>, however, since typically
+ <classname>push</classname> and <classname>pop</classname> are deemed
+ insufficient for manipulating priority-queues. </para>
+
+ <para>Different settings require different priority-queue
+ implementations which are described in later; see traits
+ discusses ways to differentiate between the different traits of
+ different implementations.</para>
+
+
+ </section>
+
+ <section xml:id="container.priority_queue.details">
+ <info><title>Details</title></info>
+
+ <section xml:id="container.priority_queue.details.iterators">
+ <info><title>Iterators</title></info>
+
+ <para>There are many different underlying-data structures for
+ implementing priority queues. Unfortunately, most such
+ structures are oriented towards making <function>push</function> and
+ <function>top</function> efficient, and consequently don't allow efficient
+ access of other elements: for instance, they cannot support an efficient
+ <function>find</function> method. In the use case where it
+ is important to both access and "do something with" an
+ arbitrary value, one would be out of luck. For example, many graph algorithms require
+ modifying a value (typically increasing it in the sense of the
+ priority queue's comparison functor).</para>
+
+ <para>In order to access and manipulate an arbitrary value in a
+ priority queue, one needs to reference the internals of the
+ priority queue from some form of an associative container -
+ this is unavoidable. Of course, in order to maintain the
+ encapsulation of the priority queue, this needs to be done in a
+ way that minimizes exposure to implementation internals.</para>
+
+ <para>In this library the priority queue's <function>insert</function>
+ method returns an iterator, which if valid can be used for subsequent <function>modify</function> and
+ <function>erase</function> operations. This both preserves the priority
+ queue's encapsulation, and allows accessing arbitrary values (since the
+ returned iterators from the <function>push</function> operation can be
+ stored in some form of associative container).</para>
+
+ <para>Priority queues' iterators present a problem regarding their
+ invalidation guarantees. One assumes that calling
+ <function>operator++</function> on an iterator will associate it
+ with the "next" value. Priority-queues are
+ self-organizing: each operation changes what the "next" value
+ means. Consequently, it does not make sense that <function>push</function>
+ will return an iterator that can be incremented - this can have
+ no possible use. Also, as in the case of hash-based containers,
+ it is awkward to define if a subsequent <function>push</function> operation
+ invalidates a prior returned iterator: it invalidates it in the
+ sense that its "next" value is not related to what it
+ previously considered to be its "next" value. However, it might not
+ invalidate it, in the sense that it can be
+ de-referenced and used for <function>modify</function> and <function>erase</function>
+ operations.</para>
+
+ <para>Similarly to the case of the other unordered associative
+ containers, this library uses a distinction between
+ point-type and range type iterators. A priority queue's <classname>iterator</classname> can always be
+ converted to a <classname>point_iterator</classname>, and a
+ <classname>const_iterator</classname> can always be converted to a
+ <classname>point_const_iterator</classname>.</para>
+
+ <para>The following snippet demonstrates manipulating an arbitrary
+ value:</para>
+ <programlisting>
+ // A priority queue of integers.
+ priority_queue<int > p;
+
+ // Insert some values into the priority queue.
+ priority_queue<int >::point_iterator it = p.push(0);
+
+ p.push(1);
+ p.push(2);
+
+ // Now modify a value.
+ p.modify(it, 3);
+
+ assert(p.top() == 3);
+ </programlisting>
+
+
+ <para>It should be noted that an alternative design could embed an
+ associative container in a priority queue. Could, but most
+ probably should not. To begin with, it should be noted that one
+ could always encapsulate a priority queue and an associative
+ container mapping values to priority queue iterators with no
+ performance loss. One cannot, however, "un-encapsulate" a priority
+ queue embedding an associative container, which might lead to
+ performance loss. Assume, that one needs to associate each value
+ with some data unrelated to priority queues. Then using
+ this library's design, one could use an
+ associative container mapping each value to a pair consisting of
+ this data and a priority queue's iterator. Using the embedded
+ method would need to use two associative containers. Similar
+ problems might arise in cases where a value can reside
+ simultaneously in many priority queues.</para>
+
+ </section>
+
+
+ <section xml:id="container.priority_queue.details.d">
+ <info><title>Underlying Data Structure</title></info>
+
+ <para>There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the graphic below, in labels A1 and A2, label B, and label C.</para>
+
+ <figure>
+ <title>Underlying Priority-Queue Data-Structures.</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_different_underlying_dss.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Underlying Priority-Queue Data-Structures.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+ <para>Roughly speaking, any value that is both pushed and popped
+ from a priority queue must incur a logarithmic expense (in the
+ amortized sense). Any priority queue implementation that would
+ avoid this, would violate known bounds on comparison-based
+ sorting (see <xref linkend="biblio.clrs2001"/> and <xref linkend="biblio.brodal96priority"/>).
+ </para>
+
+ <para>Most implementations do
+ not differ in the asymptotic amortized complexity of
+ <function>push</function> and <function>pop</function> operations, but they differ in
+ the constants involved, in the complexity of other operations
+ (e.g., <function>modify</function>), and in the worst-case
+ complexity of single operations. In general, the more
+ "structured" an implementation (i.e., the more internal
+ invariants it possesses) - the higher its amortized complexity
+ of <function>push</function> and <function>pop</function> operations.</para>
+
+ <para>This library implements different algorithms using a
+ single class: <classname>priority_queue</classname>.
+ Instantiating the <classname>Tag</classname> template parameter, "selects"
+ the implementation:</para>
+
+ <orderedlist>
+ <listitem><para>
+ Instantiating <classname>Tag = binary_heap_tag</classname> creates
+ a binary heap of the form in represented in the graphic with labels A1 or A2. The former is internally
+ selected by priority_queue
+ if <classname>Value_Type</classname> is instantiated by a primitive type
+ (e.g., an <type>int</type>); the latter is
+ internally selected for all other types (e.g.,
+ <classname>std::string</classname>). This implementations is relatively
+ unstructured, and so has good <classname>push</classname> and <classname>pop</classname>
+ performance; it is the "best-in-kind" for primitive
+ types, e.g., <type>int</type>s. Conversely, it has
+ high worst-case performance, and can support only linear-time
+ <function>modify</function> and <function>erase</function> operations.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ pairing_heap_tag</classname> creates a pairing heap of the form
+ in represented by label B in the graphic above. This
+ implementations too is relatively unstructured, and so has good
+ <function>push</function> and <function>pop</function>
+ performance; it is the "best-in-kind" for non-primitive types,
+ e.g., <classname>std:string</classname>s. It also has very good
+ worst-case <function>push</function> and
+ <function>join</function> performance (O(1)), but has high
+ worst-case <function>pop</function>
+ complexity.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ binomial_heap_tag</classname> creates a binomial heap of the
+ form repsented by label B in the graphic above. This
+ implementations is more structured than a pairing heap, and so
+ has worse <function>push</function> and <function>pop</function>
+ performance. Conversely, it has sub-linear worst-case bounds for
+ <function>pop</function>, e.g., and so it might be preferred in
+ cases where responsiveness is important.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ rc_binomial_heap_tag</classname> creates a binomial heap of the
+ form represented in label B above, accompanied by a redundant
+ counter which governs the trees. This implementations is
+ therefore more structured than a binomial heap, and so has worse
+ <function>push</function> and <function>pop</function>
+ performance. Conversely, it guarantees O(1)
+ <function>push</function> complexity, and so it might be
+ preferred in cases where the responsiveness of a binomial heap
+ is insufficient.</para></listitem>
+
+ <listitem><para>Instantiating <classname>Tag =
+ thin_heap_tag</classname> creates a thin heap of the form
+ represented by the label B in the graphic above. This
+ implementations too is more structured than a pairing heap, and
+ so has worse <function>push</function> and
+ <function>pop</function> performance. Conversely, it has better
+ worst-case and identical amortized complexities than a Fibonacci
+ heap, and so might be more appropriate for some graph
+ algorithms.</para></listitem>
+ </orderedlist>
+
+ <para>Of course, one can use any order-preserving associative
+ container as a priority queue, as in the graphic above label C, possibly by creating an adapter class
+ over the associative container (much as
+ <classname>std::priority_queue</classname> can adapt <classname>std::vector</classname>).
+ This has the advantage that no cross-referencing is necessary
+ at all; the priority queue itself is an associative container.
+ Most associative containers are too structured to compete with
+ priority queues in terms of <function>push</function> and <function>pop</function>
+ performance.</para>
+
+
+
+ </section>
+
+ <section xml:id="container.priority_queue.details.traits">
+ <info><title>Traits</title></info>
+
+ <para>It would be nice if all priority queues could
+ share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining
+ two binary heaps might throw an exception (not corrupt
+ any of the heaps on which it operates), but joining two pairing
+ heaps is exception free.</para>
+
+ <para>Tags and traits are very useful for manipulating generic
+ types. <classname>__gnu_pbds::priority_queue</classname>
+ publicly defines <classname>container_category</classname> as one of the tags. Given any
+ container <classname>Cntnr</classname>, the tag of the underlying
+ data structure can be found via <classname>typename
+ Cntnr::container_category</classname>; this is one of the possible tags shown in the graphic below.
+ </para>
+
+ <figure>
+ <title>Priority-Queue Data-Structure Tags.</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_tag_hierarchy.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>Priority-Queue Data-Structure Tags.</phrase>
+ </textobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <classname>Cntnr</classname>, then <programlisting>__gnu_pbds::container_traits<Cntnr></programlisting>
+ is a traits class identifying the properties of the
+ container.</para>
+
+ <para>To find if a container might throw if two of its objects are
+ joined, one can use
+ <programlisting>
+ container_traits<Cntnr>::split_join_can_throw
+ </programlisting>
+ </para>
+
+ <para>
+ Different priority-queue implementations have different invalidation guarantees. This is
+ especially important, since there is no way to access an arbitrary
+ value of priority queues except for iterators. Similarly to
+ associative containers, one can use
+ <programlisting>
+ container_traits<Cntnr>::invalidation_guarantee
+ </programlisting>
+ to get the invalidation guarantee type of a priority queue.</para>
+
+ <para>It is easy to understand from the graphic above, what <classname>container_traits<Cntnr>::invalidation_guarantee</classname>
+ will be for different implementations. All implementations of
+ type represented by label B have <classname>point_invalidation_guarantee</classname>:
+ the container can freely internally reorganize the nodes -
+ range-type iterators are invalidated, but point-type iterators
+ are always valid. Implementations of type represented by labels A1 and A2 have <classname>basic_invalidation_guarantee</classname>:
+ the container can freely internally reallocate the array - both
+ point-type and range-type iterators might be invalidated.</para>
+
+ <para>
+ This has major implications, and constitutes a good reason to avoid
+ using binary heaps. A binary heap can perform <function>modify</function>
+ or <function>erase</function> efficiently given a valid point-type
+ iterator. However, in order to supply it with a valid point-type
+ iterator, one needs to iterate (linearly) over all
+ values, then supply the relevant iterator (recall that a
+ range-type iterator can always be converted to a point-type
+ iterator). This means that if the number of <function>modify</function> or
+ <function>erase</function> operations is non-negligible (say
+ super-logarithmic in the total sequence of operations) - binary
+ heaps will perform badly.
+ </para>
+
+ </section>
+
+ </section> <!-- details -->
+
+ </section> <!-- priority_queue -->
+
+
+
+ </section> <!-- container -->
+
+ </section> <!-- design -->
+
+
+
+ <!-- S04: Test -->
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml"
+ href="test_policy_data_structures.xml">
+ </xi:include>
+
+ <!-- S05: Reference/Acknowledgments -->
+ <section xml:id="pbds.ack">
+ <info><title>Acknowledgments</title></info>
+ <?dbhtml filename="policy_data_structures_biblio.html"?>
+
+ <para>
+ Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
+ Laboratories), and Benjamin Kosnik (Red Hat).
+ </para>
+
+ <para>
+ This library was partially written at
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.haifa.il.ibm.com/">IBM's Haifa Research Labs</link>.
+ It is based heavily on policy-based design and uses many useful
+ techniques from Modern C++ Design: Generic Programming and Design
+ Patterns Applied by Andrei Alexandrescu.
+ </para>
+
+ <para>
+ Two ideas are borrowed from the SGI-STL implementation:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ The prime-based resize policies use a list of primes taken from
+ the SGI-STL implementation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The red-black trees contain both a root node and a header node
+ (containing metadata), connected in a way that forward and
+ reverse iteration can be performed efficiently.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ Some test utilities borrow ideas from
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/doc/libs/release/libs/timer/index.html">boost::timer</link>.
+ </para>
+
+ <para>
+ We would like to thank Scott Meyers for useful comments (without
+ attributing to him any flaws in the design or implementation of the
+ library).
+ </para>
+ <para>We would like to thank Matt Austern for the suggestion to
+ include tries.</para>
+ </section>
+
+ <!-- S06: Biblio -->
+ <bibliography xml:id="pbds.biblio">
+ <info>
+ <title>
+ Bibliography
+ </title>
+ </info>
+ <?dbhtml filename="policy_data_structures_biblio.html"?>
+
+ <!-- 01 -->
+ <biblioentry xml:id="biblio.abrahams97exception">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf">
+ STL Exception Handling Contract
+ </link>
+ </title>
+ <date>1997</date>
+
+ <author>
+ <personname>
+ <firstname>
+ Dave
+ </firstname>
+ <surname>
+ Abrahams
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ ISO SC22/WG21
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 02 -->
+ <biblioentry xml:id="biblio.alexandrescu01modern">
+ <title>
+ Modern C++ Design: Generic Programming and Design Patterns Applied
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Andrei
+ </firstname>
+ <surname>
+ Alexandrescu
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 03 -->
+ <biblioentry xml:id="biblio.andrew04mtf">
+ <title>
+ MTF, Bit, and COMB: A Guide to Deterministic and Randomized
+ Algorithms for the List Update Problem
+ </title>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ K.
+ </firstname>
+ <surname>
+ Andrew
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Gleich
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+ <!-- 04 -->
+ <biblioentry xml:id="biblio.austern00noset">
+ <title>
+ Why You Shouldn't Use set - and What You Should Use Instead
+ </title>
+ <date>
+ April, 2000
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Matthew
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ C++ Report
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 05 -->
+ <biblioentry xml:id="biblio.austern01htprop">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2001/n1326.html">
+ A Proposal to Add Hashtables to the Standard Library
+ </link>
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Matthew
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ ISO SC22/WG21
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 06 -->
+ <biblioentry xml:id="biblio.austern98segmentedit">
+ <title>
+ Segmented iterators and hierarchical algorithms
+ </title>
+ <date>
+ April, 1998
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Matthew
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Generic Programming
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 07 -->
+ <biblioentry xml:id="biblio.dawestimer">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="www.boost.org/doc/libs/release/libs/timer/">
+ Boost Timer Library
+ </link>
+ </title>
+
+ <author>
+ <personname>
+ <firstname>
+ Beeman
+ </firstname>
+ <surname>
+ Dawes
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 08 -->
+ <biblioentry xml:id="biblio.clearypool">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="www.boost.org/doc/libs/release/libs/pool/">
+ Boost Pool Library
+ </link>
+ </title>
+
+ <author>
+ <personname>
+ <firstname>
+ Stephen
+ </firstname>
+ <surname>
+ Cleary
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 09 -->
+ <biblioentry xml:id="biblio.maddocktraits">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="www.boost.org/doc/libs/release/libs/type_traits/">
+ Boost Type Traits Library
+ </link>
+ </title>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ Maddock
+ </firstname>
+ <surname>
+ John
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ Stephen
+ </firstname>
+ <surname>
+ Cleary
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Boost
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 10 -->
+ <biblioentry xml:id="biblio.brodal96priority">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://portal.acm.org/citation.cfm?id=313883">
+ Worst-case efficient priority queues
+ </link>
+ </title>
+
+ <author>
+ <personname>
+ <firstname>
+ Gerth
+ </firstname>
+ <surname>
+ Stolting Brodal
+ </surname>
+ </personname>
+ </author>
+
+ </biblioentry>
+
+ <!-- 11 -->
+ <biblioentry xml:id="biblio.bulkamayheweff">
+ <title>
+ Efficient C++ Programming Techniques
+ </title>
+ <date>
+ 1997
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Bulka
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Mayhew
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 12 -->
+ <biblioentry xml:id="biblio.clrs2001">
+ <title>
+ Introduction to Algorithms, 2nd edition
+ </title>
+ <date>
+ 2001
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ T. H.
+ </firstname>
+ <surname>
+ Cormen
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ C. E.
+ </firstname>
+ <surname>
+ Leiserson
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ R. L.
+ </firstname>
+ <surname>
+ Rivest
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ C.
+ </firstname>
+ <surname>
+ Stein
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ MIT Press
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 13 -->
+ <biblioentry xml:id="biblio.dubhashi98neg">
+ <title>
+ Balls and bins: A study in negative dependence
+ </title>
+ <date>
+ 1998
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Dubashi
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Ranjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ Random Structures and Algorithms 13
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 14 -->
+ <biblioentry xml:id="biblio.fagin79extendible">
+ <title>
+ Extendible hashing - a fast access method for dynamic files
+ </title>
+ <date>
+ 1979
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Fagin
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ J.
+ </firstname>
+ <surname>
+ Nievergelt
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ N.
+ </firstname>
+ <surname>
+ Pippenger
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ H. R.
+ </firstname>
+ <surname>
+ Strong
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ ACM Trans. Database Syst. 4
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+
+ <!-- 15 -->
+ <biblioentry xml:id="biblio.filliatre2000ptset">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://cristal.inria.fr/~frisch/icfp06_contest/advtr/applyOmatic/ptset.ml">
+ Ptset: Sets of integers implemented as Patricia trees
+ </link>
+ </title>
+
+ <date>
+ 2000
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Jean-Christophe
+ </firstname>
+ <surname>
+ Filliatre
+ </surname>
+ </personname>
+ </author>
+ </biblioentry>
+
+
+
+ <!-- 16 -->
+ <biblioentry xml:id="biblio.fredman86pairing">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.cs.cmu.edu/~sleator/papers/pairing-heaps.pdf">
+ The pairing heap: a new form of self-adjusting heap
+ </link>
+ </title>
+ <date>
+ 1986
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ M. L.
+ </firstname>
+ <surname>
+ Fredman
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Sedgewick
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ D. D.
+ </firstname>
+ <surname>
+ Sleator
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R. E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+
+ <!-- 17 -->
+ <biblioentry xml:id="biblio.gof">
+ <title>
+ Design Patterns - Elements of Reusable Object-Oriented Software
+ </title>
+ <date>
+ 1995
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ E.
+ </firstname>
+ <surname>
+ Gamma
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Helm
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Johnson
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ J.
+ </firstname>
+ <surname>
+ Vlissides
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 18 -->
+ <biblioentry xml:id="biblio.garg86order">
+ <title>
+ Order-preserving key transformations
+ </title>
+ <date>
+ 1986
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ A. K.
+ </firstname>
+ <surname>
+ Garg
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ C. C.
+ </firstname>
+ <surname>
+ Gotlieb
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ Trans. Database Syst. 11
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 19 -->
+ <biblioentry xml:id="biblio.hyslop02making">
+ <title>
+ Making a real hash of things
+ </title>
+ <date>
+ May 2002
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ J.
+ </firstname>
+ <surname>
+ Hyslop
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ Herb
+ </firstname>
+ <surname>
+ Sutter
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ C++ Report
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 20 -->
+ <biblioentry xml:id="biblio.jossutis01stl">
+ <title>
+ The C++ Standard Library - A Tutorial and Reference
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ N. M.
+ </firstname>
+ <surname>
+ Jossutis
+ </surname>
+ </personname>
+ </author>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 21 -->
+ <biblioentry xml:id="biblio.kt99fat_heaps">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.cs.princeton.edu/research/techreps/TR-597-99">
+ New Heap Data Structures
+ </link>
+ </title>
+ <date>
+ 1999
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ Haim
+ </firstname>
+ <surname>
+ Kaplan
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ Robert E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+
+ <!-- 22 -->
+ <biblioentry xml:id="biblio.kleft00sets">
+ <title>
+ Are Set Iterators Mutable or Immutable?
+ </title>
+ <date>
+ October 2000
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ Angelika
+ </firstname>
+ <surname>
+ Langer
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ Klaus
+ </firstname>
+ <surname>
+ Kleft
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ C/C++ Users Jornal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 23 -->
+ <biblioentry xml:id="biblio.knuth98sorting">
+ <title>
+ The Art of Computer Programming - Sorting and Searching
+ </title>
+ <date>
+ 1998
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ D. E.
+ </firstname>
+ <surname>
+ Knuth
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 24 -->
+ <biblioentry xml:id="biblio.liskov98data">
+ <title>
+ Data abstraction and hierarchy
+ </title>
+ <date>
+ May 1998
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ B.
+ </firstname>
+ <surname>
+ Liskov
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ SIGPLAN Notices 23
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 25 -->
+ <biblioentry xml:id="biblio.litwin80lh">
+ <title>
+ Linear hashing: A new tool for file and table addressing
+ </title>
+ <date>
+ June 1980
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ W.
+ </firstname>
+ <surname>
+ Litwin
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Proceedings of International Conference on Very Large Data Bases
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 26 -->
+ <biblioentry xml:id="biblio.maverik_lowerbounds">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps">
+ Deamortization - Part 2: Binomial Heaps
+ </link>
+ </title>
+ <date>
+ 2005
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Maverik
+ </firstname>
+ <surname>
+ Woo
+ </surname>
+ </personname>
+ </author>
+ </biblioentry>
+
+ <!-- 27 -->
+ <biblioentry xml:id="biblio.meyers96more">
+ <title>
+ More Effective C++: 35 New Ways to Improve Your Programs and Designs
+ </title>
+ <date>
+ 1996
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 28 -->
+ <biblioentry xml:id="biblio.meyers00nonmember">
+ <title>
+ How Non-Member Functions Improve Encapsulation
+ </title>
+ <date>
+ 2000
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ C/C++ Users Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 29 -->
+ <biblioentry xml:id="biblio.meyers01stl">
+ <title>
+ Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
+ </title>
+ <date>
+ 2001
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 30 -->
+ <biblioentry xml:id="biblio.meyers02both">
+ <title>
+ Class Template, Member Template - or Both?
+ </title>
+ <date>
+ 2003
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Scott
+ </firstname>
+ <surname>
+ Meyers
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ C/C++ Users Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 31 -->
+ <biblioentry xml:id="biblio.motwani95random">
+ <title>
+ Randomized Algorithms
+ </title>
+ <date>
+ 2003
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ R.
+ </firstname>
+ <surname>
+ Motwani
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ P.
+ </firstname>
+ <surname>
+ Raghavan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Cambridge University Press
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 32 -->
+ <biblioentry xml:id="biblio.mscom">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.microsoft.com/com">
+ COM: Component Model Object Technologies
+ </link>
+ </title>
+ <publisher>
+ <publishername>
+ Microsoft
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 33 -->
+ <biblioentry xml:id="biblio.musser95rationale">
+ <title>
+ Rationale for Adding Hash Tables to the C++ Standard Template Library
+ </title>
+ <date>
+ 1995
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ David R.
+ </firstname>
+ <surname>
+ Musser
+ </surname>
+ </personname>
+ </author>
+
+ </biblioentry>
+
+ <!-- 35 -->
+ <biblioentry xml:id="biblio.musser96stltutorial">
+ <title>
+ STL Tutorial and Reference Guide
+ </title>
+ <date>
+ 1996
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ David R.
+ </firstname>
+ <surname>
+ Musser
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ A.
+ </firstname>
+ <surname>
+ Saini
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+
+ </biblioentry>
+
+
+ <!-- 36 -->
+ <biblioentry xml:id="biblio.nelson96stlpq">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.dogma.net/markn/articles/pq_stl/priority.htm">Priority Queues and the STL
+ </link>
+ </title>
+ <date>
+ January 1996
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Mark
+ </firstname>
+ <surname>
+ Nelson
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Dr. Dobbs Journal
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 37 -->
+ <biblioentry xml:id="biblio.okasaki98mereable">
+ <title>
+ Fast mergeable integer maps
+ </title>
+ <date>
+ September 1998
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ C.
+ </firstname>
+ <surname>
+ Okasaki
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ A.
+ </firstname>
+ <surname>
+ Gill
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ In Workshop on ML
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 38 -->
+ <biblioentry xml:id="biblio.sgi_stl">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.sgi.com/tech/stl">
+ Standard Template Library Programmer's Guide
+ </link>
+ </title>
+ <author>
+ <personname>
+ <firstname>
+ Matt
+ </firstname>
+ <surname>
+ Austern
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ SGI
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 39 -->
+ <biblioentry xml:id="biblio.select_man">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://www.scit.wlv.ac.uk/cgi-bin/mansec?3C+select">
+ select
+ </link>
+ </title>
+ </biblioentry>
+
+
+ <!-- 40 -->
+ <biblioentry xml:id="biblio.sleator84amortized">
+ <title>
+ Amortized Efficiency of List Update Problems
+ </title>
+ <date>
+ 1984
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D. D.
+ </firstname>
+ <surname>
+ Sleator
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ R. E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ ACM Symposium on Theory of Computing
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 41 -->
+ <biblioentry xml:id="biblio.sleator85self">
+ <title>
+ Self-Adjusting Binary Search Trees
+ </title>
+ <date>
+ 1985
+ </date>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D. D.
+ </firstname>
+ <surname>
+ Sleator
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ R. E.
+ </firstname>
+ <surname>
+ Tarjan
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+
+ <publisher>
+ <publishername>
+ ACM Symposium on Theory of Computing
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 42 -->
+ <biblioentry xml:id="biblio.stepanov94standard">
+ <title>
+ The Standard Template Library
+ </title>
+ <date>
+ 1984
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ A. A.
+ </firstname>
+ <surname>
+ Stepanov
+ </surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>
+ M.
+ </firstname>
+ <surname>
+ Lee
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ </biblioentry>
+
+ <!-- 43 -->
+ <biblioentry xml:id="biblio.stroustrup97cpp">
+ <title>
+ The C++ Programming Langugage
+ </title>
+ <date>
+ 1997
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ Bjarne
+ </firstname>
+ <surname>
+ Stroustrup
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+ <!-- 44 -->
+ <biblioentry xml:id="biblio.vandevoorde2002cpptemplates">
+ <title>
+ C++ Templates: The Complete Guide
+ </title>
+ <date>
+ 2002
+ </date>
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>
+ D.
+ </firstname>
+ <surname>
+ Vandevoorde
+ </surname>
+ </personname>
+ </author>
+
+ <author>
+ <personname>
+ <firstname>
+ N. M.
+ </firstname>
+ <surname>
+ Josuttis
+ </surname>
+ </personname>
+ </author>
+ </authorgroup>
+ <publisher>
+ <publishername>
+ Addison-Wesley Publishing Company
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ <!-- 45 -->
+ <biblioentry xml:id="biblio.wickland96thirty">
+ <title>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="http://myweb.wvnet.edu/~gsa00121/books/amongdead30.zip">
+ Thirty Years Among the Dead
+ </link>
+ </title>
+ <date>
+ 1996
+ </date>
+
+ <author>
+ <personname>
+ <firstname>
+ C. A.
+ </firstname>
+ <surname>
+ Wickland
+ </surname>
+ </personname>
+ </author>
+
+ <publisher>
+ <publishername>
+ National Psychological Institute
+ </publishername>
+ </publisher>
+ </biblioentry>
+
+
+ </bibliography>
+
+</chapter>
<copyright>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
<holder>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
</holder>
--- /dev/null
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+ xml:id="pbds.test" xreflabel="Test">
+ <info><title>Testing</title></info>
+ <?dbhtml filename="policy_based_data_structures_test.html"?>
+
+ <!-- S01 regression -->
+ <section xml:id="pbds.test.regression">
+ <info><title>Regression</title></info>
+
+ <para>The library contains a single comprehensive regression test.
+ For a given container type in this library, the test creates
+ an object of the container type and an object of the
+ corresponding standard type (e.g., <classname>std::set</classname>). It
+ then performs a random sequence of methods with random
+ arguments (e.g., inserts, erases, and so forth) on both
+ objects. At each operation, the test checks the return value of
+ the method, and optionally both compares this library's
+ object with the standard's object as well as performing other
+ consistency checks on this library's object (e.g.,
+ order preservation, when applicable, or node invariants, when
+ applicable).</para>
+
+ <para>Additionally, the test integrally checks exception safety
+ and resource leaks. This is done as follows. A special
+ allocator type, written for the purpose of the test, both
+ randomly throws an exceptions when allocations are performed,
+ and tracks allocations and de-allocations. The exceptions thrown
+ at allocations simulate memory-allocation failures; the
+ tracking mechanism checks for memory-related bugs (e.g.,
+ resource leaks and multiple de-allocations). Both
+ this library's containers and the containers' value-types are
+ configured to use this allocator.</para>
+
+ <para>For granularity, the test is split into the
+ several sources, each checking only some containers.</para>
+
+ <para>For more details, consult the files in
+ <filename>testsuite/ext/pb_ds/regression</filename>.</para>
+ </section>
+
+ <!-- S02 performance -->
+ <section xml:id="pbds.test.performance">
+ <info><title>Performance</title></info>
+
+ <section xml:id="performance.hash">
+ <info><title>Hash-Based</title></info>
+ <para></para>
+
+ <!-- 01 <a href="hash_text_find_find_timing_test"> -->
+ <section xml:id="performance.hash.text_find">
+ <info><title>
+ Text <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.text_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>
+ This test inserts a number of values with keys from an
+ arbitrary text (<xref
+ linkend="biblio.wickland96thirty"/>) into a container,
+ then performs a series of finds using
+ <function>find</function> . It measures the average
+ time for <function>find</function> as a function of
+ the number of values inserted.</para>
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/text_find_timing_test.cc
+ </filename>
+ </para>
+
+ <para>
+ And uses the data file:
+ <filename>
+ filethirty_years_among_the_dead_preproc.txt
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different range-hashing
+ functions, trigger policies, and cache-hashing policies.
+ </para>
+
+ </section>
+
+ <section xml:id="hash.text_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for the native
+ and collision-chaining hash types the the function
+ applied being a text find timing test using
+ <function>find</function>.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_text_find_timing_test_hash_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_text_find_timing_test_hash_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_sth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.text_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, the range-hashing scheme affects performance
+ more than other policies. As the results show, containers using
+ mod-based range-hashing (including the native hash-based container,
+ which is currently hard-wired to this scheme) have lower performance
+ than those using mask-based range-hashing. A modulo-based
+ range-hashing scheme's main benefit is that it takes into account
+ all hash-value bits. Standard string hash-functions are designed to
+ create hash values that are nearly-uniform as is (<xref
+ linkend="biblio.knuth98sorting"/>).</para>
+
+ <para>Trigger policies, i.e. the load-checks constants, affect
+ performance to a lesser extent.</para>
+
+ <para>Perhaps surprisingly, storing the hash value alongside each
+ entry affects performance only marginally, at least in this
+ library's implementation. (Unfortunately, it was not possible to run
+ the tests with <classname>std::tr1::unordered_map</classname> 's
+ <classname>cache_hash_code = true</classname> , as it appeared to
+ malfuntion.)</para>
+
+ </section>
+
+ </section>
+
+ <!-- 02 <a href="hash_int_find_timing_test"> -->
+ <section xml:id="performance.hash.int_find">
+ <info><title>
+ Integer <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.int_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+ using <function>find</function>. It measures the average time
+ for <function>find</function> as a function of the number of values
+ inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/random_int_find_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ hash-tables,
+ range-hashing functions, and trigger policies.</para>
+
+ </section>
+
+ <section xml:id="hash.int_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </para>
+
+ <para>The first graphic below shows the results for the native and
+ collision-chaining hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 01 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_cc_hash_random_int_find_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_cc_hash_random_int_find_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+
+ <para>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 02 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_gp_hash_random_int_find_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_gp_hash_random_int_find_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ gp_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.int_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, the choice of underlying hash-table affects
+ performance most, then the range-hashing scheme and, only finally,
+ other policies.</para>
+
+ <para>When comparing probing and chaining containers, it is
+ apparent that the probing containers are less efficient than the
+ collision-chaining containers (
+ <classname>std::tr1::unordered_map</classname> uses
+ collision-chaining) in this case.</para>
+
+ <para>Hash-Based Integer Subscript Insert Timing Test shows
+ a different case, where the situation is reversed;
+ </para>
+
+ <para>Within each type of hash-table, the range-hashing scheme
+ affects performance more than other policies; Hash-Based Text
+ <function>find</function> Find Timing Test also shows this. In the
+ above graphics should be noted that
+ <classname>std::tr1::unordered_map</classname> are hard-wired
+ currently to mod-based schemes.
+ </para>
+
+ </section>
+
+ </section>
+
+ <!-- 03 <a href="hash_int_subscript_find_test"> -->
+ <section xml:id="performance.hash.int_subscript_find">
+ <info><title>
+ Integer Subscript <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.int_subscript_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+ using <function>operator[]</function>. It measures the average time
+ for <function>operator[]</function> as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/random_int_subscript_find_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ hash-tables, range-hashing functions, and trigger policies.</para>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </para>
+
+ <para>The first graphic below shows the results for the native
+ and collision-chaining hash types, using as the function
+ applied an integer subscript timing test with
+ <function>find</function>.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_cc_hash_random_int_subscript_timing_test_find_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_cc_hash_random_int_subscript_timing_test_find_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+
+ <para>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 02 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_gp_hash_random_int_subscript_timing_test_find_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_gp_hash_random_int_subscript_timing_test_find_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ gp_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+ <para>This test shows similar results to Hash-Based
+ Integer <classname>find</classname> Find Timing test.</para>
+
+ </section>
+
+ </section>
+
+ <!-- 04 <a href="hash_random_int_subscript_insert_timing_test"> -->
+ <section xml:id="performance.hash.int_subscript_insert">
+ <info><title>
+ Integer Subscript <function>insert</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.int_subscript_insert.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with uniform i.i.d.
+ integer keys into a container, using
+ <function>operator[]</function>. It measures the average time for
+ <function>operator[]</function> as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/random_int_subscript_insert_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ hash-tables.</para>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_insert.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>
+ There are two sets of results for this type, one for
+ collision-chaining hashes, and one for general-probe hashes.
+ </para>
+
+ <para>The first graphic below shows the results for the native
+ and collision-chaining hash types, using as the function
+ applied an integer subscript timing test with
+ <function>insert</function>.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_cc_hash_random_int_subscript_timing_test_insert_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_cc_hash_random_int_subscript_timing_test_insert_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>
+ </para>
+
+ <para>
+ </para>
+
+ <para>And the second graphic shows the results for the native and
+ general-probe hash types. The function applied being a random
+ integer timing test using <function>find</function>.
+ </para>
+
+ <!-- results graphic 02 -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_gp_hash_random_int_subscript_timing_test_insert_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_gp_hash_random_int_subscript_timing_test_insert_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ gp_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="hash.int_subscript_insert.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, as in Hash-Based Text
+ <function>find</function> Find Timing test and Hash-Based
+ Integer <function>find</function> Find Timing test , the choice
+ of underlying hash-table underlying hash-table affects performance
+ most, then the range-hashing scheme, and
+ finally any other policies.</para>
+ <para>There are some differences, however:</para>
+ <orderedlist>
+ <listitem><para>In this setting, probing tables function sometimes more
+ efficiently than collision-chaining tables.
+ This is explained shortly.</para></listitem>
+ <listitem><para>The performance graphs have a "saw-tooth" shape. The
+ average insert time rises and falls. As values are inserted
+ into the container, the load factor grows larger. Eventually,
+ a resize occurs. The reallocations and rehashing are
+ relatively expensive. After this, the load factor is smaller
+ than before.</para></listitem>
+ </orderedlist>
+
+ <para>Collision-chaining containers use indirection for greater
+ flexibility; probing containers store values contiguously, in
+ an array (see Figure Motivation::Different
+ underlying data structures A and B, respectively). It
+ follows that for simple data types, probing containers access
+ their allocator less frequently than collision-chaining
+ containers, (although they still have less efficient probing
+ sequences). This explains why some probing containers fare
+ better than collision-chaining containers in this case.</para>
+
+ <para>
+ Within each type of hash-table, the range-hashing scheme affects
+ performance more than other policies. This is similar to the
+ situation in Hash-Based Text
+ <function>find</function> Find Timing Test and Hash-Based
+ Integer <function>find</function> Find Timing Test.
+ Unsurprisingly, however, containers with lower α<subscript>max</subscript> perform worse in this case,
+ since more re-hashes are performed.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 05 <a href="hash_zlob_random_int_find_find_timing_test"> -->
+
+ <!-- 05 <a href="hash_zlob_random_int_find_find_timing_test"> -->
+ <section xml:id="performance.hash.zlob_int_find">
+ <info><title>
+ Integer <function>find</function> with Skewed-Distribution
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.zlob_int_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with a markedly
+ non-uniform integer keys into a container, then performs
+ a series of finds using <function>find</function>. It measures the average
+ time for <function>find</function> as a function of the number of values in
+ the containers. The keys are generated as follows. First, a
+ uniform integer is created. Then it is then shifted left 8 bits.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different range-hashing
+ functions and trigger policies.</para>
+
+
+ </section>
+
+ <section xml:id="hash.zlob_int_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_hash_zlob_random_int_find_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_hash_zlob_random_int_find_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mod_quadp_prime_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>quadratic_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.zlob_int_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this setting, the distribution of keys is so skewed that
+ the underlying hash-table type affects performance marginally.
+ (This is in contrast with Hash-Based Text
+ <function>find</function> Find Timing Test, Hash-Based
+ Integer <function>find</function> Find Timing Test, Hash-Based
+ Integer Subscript Find Timing Test and Hash-Based
+ Integer Subscript Insert Timing Test.)</para>
+
+ <para>The range-hashing scheme affects performance dramatically. A
+ mask-based range-hashing scheme effectively maps all values
+ into the same bucket. Access degenerates into a search within
+ an unordered linked-list. In the graphic above, it should be noted that
+ <classname>std::tr1::unordered_map</classname> is hard-wired currently to mod-based and mask-based schemes,
+ respectively.</para>
+
+ <para>When observing the settings of this test, it is apparent
+ that the keys' distribution is far from natural. One might ask
+ if the test is not contrived to show that, in some cases,
+ mod-based range hashing does better than mask-based range
+ hashing. This is, in fact just the case. A
+ more natural case in which mod-based range hashing is better was not encountered.
+ Thus the inescapable conclusion: real-life key distributions are handled better
+ with an appropriate hash function and a mask-based
+ range-hashing function. (<filename>pb_ds/example/hash_shift_mask.cc</filename>
+ shows an example of handling this a-priori known skewed
+ distribution with a mask-based range-hashing function). If hash
+ performance is bad, a χ<superscript>2</superscript> test can be used
+ to check how to transform it into a more uniform
+ distribution.</para>
+ <para>For this reason, this library's default range-hashing
+ function is mask-based.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 06 <a href="hash_random_int_erase_mem_usage_test"> -->
+
+ <!-- 06 <a href="hash_random_int_erase_mem_usage_test"> -->
+ <section xml:id="performance.hash.erase_mem">
+ <info><title>
+ Erase Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="hash.erase_mem.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of uniform integer keys
+ into a container, then erases all keys except one. It measures
+ the final size of the container.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc
+ </filename>
+ </para>
+
+
+ <para>The test checks how containers adjust internally as their
+ logical size decreases.</para>
+
+ </section>
+
+ <section xml:id="hash.erase_mem.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_hash_random_int_erase_mem_usage_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_hash_random_int_erase_mem_usage_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="5" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ n_hash_map_ncah
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_map</classname>
+ </entry>
+ <entry>
+ <classname>cache_hash_code</classname>
+ </entry>
+ <entry>
+ <constant>false</constant>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <!-- hash 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mod_prime_nea_lc_1div8_1div1_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mod_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_prime_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/1
+ </entry>
+ </row>
+
+ <!-- hash 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ <!-- hash 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c5">
+ gp_hash_mask_linp_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>gp_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Probe_Fn</classname>
+ </entry>
+ <entry>
+ <classname>linear_probe_fn</classname>
+ </entry>
+ <entry namest="c4" nameend="c5"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="hash.erase_mem.observations">
+ <info><title>
+ Observations
+ </title></info>
+ <para>The standard's hash-based containers act very differently than trees in
+ this respect. When erasing numerous keys from an standard
+ associative-container, the resulting memory user varies greatly
+ depending on whether the container is tree-based or hash-based.
+ This is a fundamental consequence of the standard's interface for
+ associative containers, and it is not due to a specific
+ implementation.</para>
+ </section>
+
+ </section>
+ </section>
+
+
+ <section xml:id="performance.branch">
+ <info><title>Branch-Based</title></info>
+ <para></para>
+
+ <!-- 01 <a href="tree_text_insert_timing_test"> -->
+ <section xml:id="performance.branch.text_insert">
+ <info><title>
+ Text <function>insert</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.text_insert.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an arbitrary
+ text ([ wickland96thirty ]) into a container
+ using <function>insert</function> . It measures the average time
+ for <function>insert</function> as a function of the number of
+ values inserted.</para>
+
+ <para>The test checks the effect of different underlying
+ data structures.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/tree_text_insert_timing.cc
+ </filename>
+ </para>
+
+
+ </section>
+
+ <section xml:id="branch.text_insert.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The three graphics below show the results for the native
+ tree and this library's node-based trees, the native tree and
+ this library's vector-based trees, and the native tree
+ and this library's PATRICIA-trie, respectively.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several node-based tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_insert_timing_test_node_tree_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_timing_test_node_tree_local.png"/>
+ </imageobject>
+ </mediaobject>
+
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+ </informalfigure>
+
+ <informaltable frame="all">
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the
+ native tree type and a vector-based tree type.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_insert_timing_test_vector_tree_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_timing_test_vector_tree_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+
+ <para>The graphic below shows the results for the
+ native tree type and a PATRICIA trie type.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_insert_timing_test_pat_trie_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_text_insert_timing_test_pat_trie_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.text_insert.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Observing the first graphic implies that for this setting, a splay tree
+ (<classname>tree</classname> with <classname>Tag
+ </classname> = <classname>splay_tree_tag</classname>) does not do
+ well. See also the Branch-Based
+ Text <function>find</function> Find Timing Test. The two
+ red-black trees perform better.</para>
+
+ <para>Observing the second graphic, an ordered-vector tree
+ (<classname>tree</classname> with <classname>Tag
+ </classname> = <classname>ov_tree_tag</classname>) performs
+ abysmally. Inserting into this type of tree has linear complexity
+ [ austern00noset].</para>
+
+ <para>Observing the third and last graphic, A PATRICIA trie
+ (<classname>trie</classname> with <classname>Tag
+ </classname> = <classname>pat_trie_tag</classname>) has abysmal
+ performance, as well. This is not that surprising, since a
+ large-fan-out PATRICIA trie works like a hash table with
+ collisions resolved by a sub-trie. Each time a collision is
+ encountered, a new "hash-table" is built A large fan-out PATRICIA
+ trie, however, doe does well in look-ups (see Branch-Based
+ Text <function>find</function> Find Timing Test). It may be
+ beneficial in semi-static settings.</para>
+ </section>
+
+ </section>
+
+
+ <!-- 02 <a href="tree_text_find_find_timing_test"> -->
+ <section xml:id="performance.branch.text_find">
+ <info><title>
+ Text <function>find</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.text_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([wickland96thirty]) into
+ a container, then performs a series of finds using
+ <function>find</function>. It measures the average time
+ for <function>find</function> as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/text_find_timing.cc
+ </filename>
+ </para>
+
+
+ <para>The test checks the effect of different underlying
+ data structures.</para>
+
+ </section>
+
+ <section xml:id="branch.text_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_text_find_timing_test_tree_like_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_text_find_timing_test_tree_like_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.text_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>For this setting, a splay tree (<classname>tree</classname>
+ with <classname>Tag
+ </classname> = <classname>splay_tree_tag</classname>) does not do
+ well. This is possibly due to two reasons:</para>
+
+ <orderedlist>
+ <listitem><para>A splay tree is not guaranteed to be balanced [motwani95random]. If a
+ splay tree contains n nodes, its average root-leaf
+ path can be m >> log(n).</para></listitem>
+ <listitem><para>Assume a specific root-leaf search path has length
+ m, and the search-target node has distance m'
+ from the root. A red-black tree will require m + 1
+ comparisons to find the required node; a splay tree will
+ require 2 m' comparisons. A splay tree, consequently,
+ can perform many more comparisons than a red-black tree.</para></listitem>
+ </orderedlist>
+ <para>An ordered-vector tree (<classname>tree</classname>
+ with <classname>Tag</classname> = <classname>ov_tree_tag</classname>), a red-black
+ tree (<classname>tree</classname>
+ with <classname>Tag</classname> = <classname>rb_tree_tag</classname>), and the
+ native red-black tree all share approximately the same
+ performance.</para>
+ <para>An ordered-vector tree is slightly slower than red-black
+ trees, since it requires, in order to find a key, more math
+ operations than they do. Conversely, an ordered-vector tree
+ requires far lower space than the others. ([austern00noset], however,
+ seems to have an implementation that is also faster than a
+ red-black tree).</para>
+ <para>A PATRICIA trie (<classname>trie</classname>
+ with <classname>Tag</classname> = <classname>pat_trie_tag</classname>) has good
+ look-up performance, due to its large fan-out in this case. In
+ this setting, a PATRICIA trie has look-up performance comparable
+ to a hash table (see Hash-Based Text
+ <classname>find</classname> Timing Test), but it is order
+ preserving. This is not that surprising, since a large-fan-out
+ PATRICIA trie works like a hash table with collisions resolved
+ by a sub-trie. A large-fan-out PATRICIA trie does not do well on
+ modifications (see Tree-Based and Trie-Based
+ Text Insert Timing Test). Therefore, it is possibly beneficial in
+ semi-static settings.</para>
+ </section>
+ </section>
+
+
+ <!-- 03 <a href="tree_text_lor_find_find_timing_test"> -->
+ <section xml:id="performance.branch.text_lor_find">
+
+ <info><title>
+ Text <function>find</function> with Locality-of-Reference
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.text_lor_find.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container, then performs a series of finds using
+ <function>find</function>. It is different than Tree-Based and
+ Trie-Based Text <function>find</function> Find Timing Test in the
+ sequence of finds it performs: this test performs multiple
+ <function>find</function>s on the same key before moving on to the next
+ key. It measures the average time for <function>find</function> as a
+ function of the number of values inserted.</para>
+
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/tree_text_lor_find_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying
+ data structures in a locality-of-reference setting.</para>
+
+ </section>
+
+ <section xml:id="branch.text_lor_find.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_text_lor_find_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_map
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::map</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.text_lor_find.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>For this setting, an ordered-vector tree
+ (<classname>tree</classname> with <classname>Tag</classname>
+ = <classname>ov_tree_tag</classname>), a red-black tree
+ (<classname>tree</classname> with <classname>Tag</classname>
+ = <classname>rb_tree_tag</classname>), and the native red-black
+ tree all share approximately the same performance.</para>
+ <para>A splay tree (<classname>tree</classname>
+ with <classname>Tag</classname> = <classname>splay_tree_tag</classname>) does
+ much better, since each (successful) find "bubbles" the
+ corresponding node to the root of the tree.</para>
+
+ </section>
+ </section>
+
+ <!-- 04 <a href="tree_split_join_timing_test"> -->
+ <section xml:id="performance.branch.split_join">
+
+ <info><title>
+ <function>split</function> and <function>join</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.split_join.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test a container, inserts into a number of values, splits
+ the container at the median, and joins the two containers. (If the
+ containers are one of this library's trees,
+ it splits and joins with the <function>split</function> and
+ <function>join</function> method; otherwise, it uses the <function>erase</function> and
+ <function>insert</function> methods.) It measures the time for splitting
+ and joining the containers as a function of the number of
+ values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/tree_split_join_timing.cc
+ </filename>
+ </para>
+
+
+ <para>The test checks the performance difference of <function>join</function>
+ as opposed to a sequence of <function>insert</function> operations; by
+ implication, this test checks the most efficient way to erase a
+ sub-sequence from a tree-like-based container, since this can
+ always be performed by a small sequence of splits and joins.
+ </para>
+ </section>
+
+ <section xml:id="branch.split_join.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_split_join_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_split_join_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_set
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::set</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ ov_tree_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>ov_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pat_trie_map
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pat_trie_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.split_join.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this test, the native red-black trees must be split and
+ joined externally, through a sequence of <function>erase</function> and
+ <function>insert</function> operations. This is clearly
+ super-linear, and it is not that surprising that the cost is
+ high.</para>
+ <para>This library's tree-based containers use in this test the
+ <function>split</function> and <function>join</function> methods,
+ which have lower complexity: the <function>join</function> method
+ of a splay tree (<classname>tree</classname>
+ with <classname>Tag </classname>
+ = <classname>splay_tree_tag</classname>) is quadratic in the
+ length of the longest root-leaf path, and linear in the total
+ number of elements; the <function>join</function> method of a
+ red-black tree (<classname>tree</classname>
+ with <classname>Tag </classname>
+ = <classname>rb_tree_tag</classname>) or an ordered-vector tree
+ (<classname>tree</classname> with <classname>Tag </classname>
+ = <classname>ov_tree_tag</classname>) is linear in the number of
+ elements.</para>
+
+ <para>Asides from orders of growth, this library's trees access their
+ allocator very little in these operations, and some of them do not
+ access it at all. This leads to lower constants in their
+ complexity, and, for some containers, to exception-free splits and
+ joins (which can be determined
+ via <classname>container_traits</classname>).</para>
+
+ <para>It is important to note that <function>split</function> and
+ <function>join</function> are not esoteric methods - they are the most
+ efficient means of erasing a contiguous range of values from a
+ tree based container.</para>
+ </section>
+ </section>
+
+ <!-- 05 <a href="tree_order_statistics_timing_test"> -->
+ <section xml:id="performance.branch.order_statistics">
+
+ <info><title>
+ Order-Statistics
+ </title></info>
+ <para></para>
+
+ <section xml:id="branch.order_statistics.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test creates a container, inserts random integers into the
+ the container, and then checks the order-statistics of the
+ container's values. (If the container is one of this
+ library's trees, it does this with
+ the <function>order_of_key</function> method of
+ <classname>tree_order_statistics_node_update</classname>
+ ; otherwise, it uses the <function>find</function> method and
+ <function>std::distance</function>.) It measures the average
+ time for such queries as a function of the number of values
+ inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/tree_order_statistics_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the performance difference of policies based
+ on node-invariant as opposed to a external functions.</para>
+
+ </section>
+
+ <section xml:id="branch.order_statistics.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_tree_order_statistics_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_tree_order_statistics_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_set
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::set</classname>
+ </entry>
+ <entry namest="c2" nameend="c3"></entry>
+ </row>
+
+ <!-- branch 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ splay_tree_ost_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>splay_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>tree_order_statistics_node_update</classname>
+ </entry>
+ </row>
+
+
+ <!-- branch 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rb_tree_ost_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>tree_order_statistics_node_update</classname>
+ </entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="branch.order_statistics.observations">
+ <info><title>
+ Observations
+ </title></info>
+ <para>In this test, the native red-black tree can support
+ order-statistics queries only externally, by performing a
+ <classname>find</classname> (alternatively, <classname>lower_bound</classname> or
+ <classname>upper_bound</classname> ) and then using <classname>std::distance</classname> .
+ This is clearly linear, and it is not that surprising that the
+ cost is high.</para>
+ <para>This library's tree-based containers use in this test the
+ <classname>order_of_key</classname> method of <classname>tree_order_statistics_node_update</classname>.
+ This method has only linear complexity in the length of the
+ root-node path. Unfortunately, the average path of a splay tree
+ (<classname>tree</classname>
+ with <classname>Tag =</classname> <classname>splay_tree_tag</classname> ) can
+ be higher than logarithmic; the longest path of a red-black
+ tree (<classname>tree</classname>
+ with <classname>Tag =</classname> <classname>rb_tree_tag</classname> ) is
+ logarithmic in the number of elements. Consequently, the splay
+ tree has worse performance than the red-black tree.</para>
+ </section>
+ </section>
+
+ </section> <!-- branch -->
+
+ <section xml:id="performance.multimap">
+ <info><title>Multimap</title></info>
+ <para></para>
+
+
+ <!-- 01 <a href="multimap_text_find_timing_test_small"> -->
+ <section xml:id="performance.multimap.text_find_small">
+ <info><title>
+ Text <function>find</function> with Small Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_find_small.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform i.i.d.integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key (see Motivation::Associative
+ Containers::Alternative to Multiple Equivalent Keys). There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average find-time as a function of the
+ number of values inserted. For this library's containers, it
+ finds the secondary key from a container obtained from finding
+ a primary key. For the native multimaps, it searches a range
+ obtained using <classname>std::equal_range</classname> on a primary key.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/multimap_text_find_timing_small.cc
+ </filename>
+ </para>
+
+ <para>The test checks the find-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_find_small.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_small_s2p_tree_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_small_s2p_tree_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_small_s2p_hash_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_small_s2p_hash_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_find_small.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+ <!-- 02 <a href="multimap_text_find_timing_test_large"> -->
+ <section xml:id="performance.multimap.text_find_large">
+ <info><title>
+ Text <function>find</function> with Large Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_find_large.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average find-time as a function of the
+ number of values inserted. For this library's containers, it
+ finds the secondary key from a container obtained from finding
+ a primary key. For the native multimaps, it searches a range
+ obtained using <classname>std::equal_range</classname> on a primary key.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/multimap_text_find_timing_large.cc
+ </filename>
+ </para>
+
+ <para>The test checks the find-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_find_large.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_large_s2p_tree_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_large_s2p_tree_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_find_large.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 03 <a href="multimap_text_insert_timing_test_small"> -->
+ <section xml:id="performance.multimap.text_insert_small">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_small.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average insert-time as a function of
+ the number of values inserted. For this library's containers,
+ it inserts a primary key into the primary associative
+ container, then a secondary key into the secondary associative
+ container. For the native multimaps, it obtains a range using
+ <classname>std::equal_range</classname>, and inserts a value only if it was
+ not contained already.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/multimap_text_insert_timing_small.cc
+ </filename>
+ </para>
+
+ <para>The test checks the insert-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_small.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_timing_test_small_s2p_tree_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_timing_test_small_s2p_tree_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_small_s2p_hash_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_small_s2p_hash_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_small.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 04 <a href="multimap_text_insert_timing_test_large"> -->
+ <section xml:id="performance.multimap.text_insert_large">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_large.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 400 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges from 1 to 5.</para>
+ <para>The test measures the average insert-time as a function of
+ the number of values inserted. For this library's containers,
+ it inserts a primary key into the primary associative
+ container, then a secondary key into the secondary associative
+ container. For the native multimaps, it obtains a range using
+ <classname>std::equal_range</classname>, and inserts a value only if it was
+ not contained already.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/multimap_text_insert_timing_large.cc
+ </filename>
+ </para>
+
+ <para>The test checks the insert-time scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_large.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_timing_test_large_s2p_tree_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_timing_test_large_s2p_tree_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_large.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+
+ <!-- 05 <a href="multimap_text_insert_mem_usage_test_small"> -->
+ <section xml:id="performance.multimap.text_insert_mem_small">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_mem_small.info">
+ <info><title>
+ Description
+ </title></info>
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 100 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges to about 20.</para>
+ <para>The test measures the memory use as a function of the number
+ of values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc
+ </filename>
+ </para>
+
+ <para>The test checks the memory scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_small.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_mem_usage_test_small_s2p_tree_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_small.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+ <!-- 06 <a href="multimap_text_insert_mem_usage_test_large"> -->
+ <section xml:id="performance.multimap.text_insert_mem_large">
+ <info><title>
+ Text <function>insert</function> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="multimap.text_insert_mem_large.info">
+ <info><title>
+ Description
+ </title></info>
+ <para>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+ [wickland96thirty], and
+ the second is a uniform integer. The container is a
+ "multimap" - it considers the first member of each pair as a
+ primary key, and the second member of each pair as a secondary
+ key. There
+ are 100 distinct primary keys, and the ratio of secondary keys
+ to primary keys ranges to about 20.</para>
+ <para>The test measures the memory use as a function of the number
+ of values inserted.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc
+ </filename>
+ </para>
+
+ <para>The test checks the memory scalability of different
+ "multimap" designs.</para>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_large.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_insert_mem_usage_test_large_s2p_tree_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="4" valign="top">
+ <classname>tree</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rb_tree_tag</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Node_Update</classname>
+ </entry>
+ <entry>
+ <classname>null_node_update</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ <para>The graphic below show the results for "multimaps" which
+ use a hash-based container for primary keys.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.png"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="33"
+ fileref="../images/pbds_multimap_text_find_timing_test_large_s2p_hash_local.pdf"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="7" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <colspec colname="c7"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ n_hash_mmap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::tr1::unordered_multimap</classname>
+ </entry>
+ <entry namest="c2" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_lu_mtf_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="3" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>Mapped</classname>
+ </entry>
+ <entry>
+ <classname>list_update</classname>
+ </entry>
+ <entry>
+ <classname>Update_Policy</classname>
+ </entry>
+ <entry>
+ <classname>lu_move_to_front_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <!-- multimap 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c7">
+ rb_tree_mmap_cc_hash_mask_exp_nea_lc_1div8_1div2_nsth_set
+ </entry>
+ </row>
+
+ <row>
+ <entry morerows="5" valign="top">
+ <classname>
+ cc_hash_table
+ </classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c4" nameend="c7"></entry>
+ </row>
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="2" valign="top">
+ <classname>Mapped</classname>
+ </entry>
+ <entry morerows="2" valign="top">
+ <classname>cc_hash_table</classname>
+ </entry>
+ <entry>
+ <classname>Comb_Hash_Fn</classname>
+ </entry>
+ <entry>
+ <classname>direct_mask_range_hashing</classname>
+ </entry>
+ <entry namest="c6" nameend="c7"></entry>
+ </row>
+
+ <row>
+ <entry morerows="1" valign="top">
+ <classname>Resize_Policy</classname>
+ </entry>
+ <entry morerows="1" valign="top">
+ <classname>hash_standard_resize_policy</classname>
+ </entry>
+ <entry>
+ <classname>Size_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_exponential_size_policy</classname>
+ </entry>
+ </row>
+
+ <row>
+ <entry valign="top">
+ <classname>Trigger_Policy</classname>
+ </entry>
+ <entry>
+ <classname>hash_load_check_resize_trigger</classname> with
+ α<subscript>min</subscript> = 1/8 and α<subscript>max</subscript> = 1/2
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ </section>
+
+ <section xml:id="multimap.text_insert_mem_large.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>See Observations::Mapping-Semantics
+ Considerations.</para>
+
+ </section>
+
+ </section>
+
+ </section> <!-- multimap -->
+
+ <section xml:id="performance.priority_queue">
+ <info><title>Priority Queue</title></info>
+
+ <!-- 01 <a href="priority_queue_text_push_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_push">
+ <info><title>
+ Text <function>push</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_push.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container using <function>push</function>. It measures the average time
+ for <function>push</function> as a function of the number of values
+ pushed.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_text_push_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_push.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_push_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the binary-heap
+ based native priority queues and this library's pairing-heap
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_pairing_priority_queue_text_push_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml//images/pbds_pairing_priority_queue_text_push_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_push.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Pairing heaps (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>pairing_heap_tag</classname>)
+ are the most suited for sequences of <function>push</function> and
+ <function>pop</function> operations of non-primitive types (e.g.
+ <classname>std::string</classname>s). (See Priority Queue
+ Text <function>push</function> and <function>pop</function> Timing Test.) They are
+ less constrained than binomial heaps, e.g., and since
+ they are node-based, they outperform binary heaps. (See
+ Priority
+ Queue Random Integer <function>push</function> Timing Test for the case
+ of primitive types.)</para>
+
+ <para>The standard's priority queues do not seem to perform well in
+ this case: the <classname>std::vector</classname> implementation needs to
+ perform a logarithmic sequence of string operations for each
+ operation, and the deque implementation is possibly hampered by
+ its need to manipulate a relatively-complex type (deques
+ support a O(1) <function>push_front</function>, even though it is
+ not used by <classname>std::priority_queue</classname>.)</para>
+
+ </section>
+ </section>
+
+ <!-- 02 <a href="priority_queue_text_push_pop_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_push_pop">
+ <info><title>
+ Text <function>push</function> and <function>pop</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_push_pop.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container using <classname>push</classname> , then removes them using
+ <classname>pop</classname> . It measures the average time for <classname>push</classname>
+ as a function of the number of values.</para>
+
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_push_pop.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_push_pop_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_push_pop_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the native priority
+ queues and this library's pairing-heap priority_queue data
+ structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_pairing_priority_queue_text_push_pop_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml//images/pbds_pairing_priority_queue_text_push_pop_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname> adapting <classname>std::vector</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_push_pop.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>These results are very similar to Priority Queue Text
+ <function>push</function> Timing Test. As stated there, pairing heaps
+ (<classname>priority_queue</classname> with
+ <classname>Tag</classname>
+ = <classname>pairing_heap_tag</classname>) are most suited
+ for <function>push</function> and <function>pop</function>
+ sequences of non-primitive types such as strings. Observing these
+ two tests, one can note that a pairing heap outperforms the others
+ in terms of <function>push</function> operations, but equals
+ binary heaps (<classname>priority_queue</classname> with
+ <classname>Tag</classname>
+ = <classname>binary_heap_tag</classname>) if the number
+ of <function>push</function> and <function>pop</function>
+ operations is equal. As the number of <function>pop</function>
+ operations is at most equal to the number
+ of <function>push</function> operations, pairing heaps are better
+ in this case. See Priority Queue Random
+ Integer <function>push</function> and <function>pop</function>
+ Timing Test for a case which is different.</para>
+
+ </section>
+ </section>
+
+
+ <!-- 03 <a href="priority_queue_random_int_push_timing_test"> -->
+ <section xml:id="performance.priority_queue.int_push">
+ <info><title>
+ Integer <function>push</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.int_push.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with integer keys
+ into a container using <function>push</function>. It
+ measures the average time for <function>push</function> as a
+ function of the number of values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_random_int_push_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.int_push.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_random_int_push_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_random_int_push_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the binary-heap
+ based native priority queues and this library's
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_binary_priority_queue_random_int_push_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml//images/pbds_binary_priority_queue_random_int_push_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname> adapting <classname>std::vector</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.int_push.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+
+ <para>Binary heaps are the most suited for sequences of
+ <function>push</function> and <function>pop</function> operations of primitive types
+ (e.g. <type>int</type>s). They are less constrained
+ than any other type, and since it is very efficient to store
+ such types in arrays, they outperform even pairing heaps. (See
+ Priority
+ Queue Text <function>push</function> Timing Test for the case of
+ non-primitive types.)</para>
+ </section>
+ </section>
+
+ <!-- 04 "priority_queue_random_int_push_pop_timing_test" -->
+ <section xml:id="performance.priority_queue.int_push_pop">
+ <info><title>
+ Integer <function>push</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.int_push_pop.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with integer keys
+ into a container using <function>push</function> , then removes them
+ using <function>pop</function> . It measures the average time for
+ <function>push</function> and <function>pop</function> as a function
+ of the number of values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.int_push_pop.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_random_int_push_pop_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_random_int_push_pop_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ </section>
+
+ <section xml:id="priority_queue.int_push_pop.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Binary heaps are the most suited for sequences of
+ <function>push</function> and <function>pop</function> operations of primitive types
+ (e.g. <type>int</type>s). This is explained in
+ Priority
+ Queue Random Int <function>push</function> Timing Test. (See Priority Queue
+ Text <function>push</function> Timing Test for the case of primitive
+ types.)</para>
+
+ <para>At first glance it seems that the standard's vector-based
+ priority queue is approximately on par with this
+ library's corresponding priority queue. There are two
+ differences however:</para>
+ <orderedlist>
+ <listitem><para>The standard's priority queue does not downsize the underlying
+ vector (or deque) as the priority queue becomes smaller
+ (see Priority Queue
+ Text <function>pop</function> Memory Use Test). It is therefore
+ gaining some speed at the expense of space.</para></listitem>
+ <listitem><para>From Priority Queue Random
+ Integer <function>push</function> and <function>pop</function>
+ Timing Test, it seems that the standard's priority queue is
+ slower in terms of <function>push</function> operations. Since
+ the number of
+ <function>pop</function> operations is at most that of <function>push</function>
+ operations, the test here is the "best" for the standard's
+ priority queue.</para></listitem>
+ </orderedlist>
+
+
+ </section>
+ </section>
+
+
+ <!-- 05 <a href="priority_queue_text_pop_mem_usage_test"> -->
+ <section xml:id="performance.priority_queue.text_pop">
+ <info><title>
+ Text <function>pop</function> Memory Use
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_pop.info">
+ <info><title>
+ Description
+ </title></info>
+
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ a container, then pops them until only one is left in the
+ container. It measures the memory use as a function of the
+ number of values pushed to the container.</para>
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_pop.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_pop_mem_usage_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_pop_mem_usage_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_pop.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+
+ <para>The priority queue implementations (excluding the standard's) use
+ memory proportionally to the number of values they hold:
+ node-based implementations (e.g., a pairing heap) do so
+ naturally; this library's binary heap de-allocates memory when
+ a certain lower threshold is exceeded.</para>
+
+ <para>Note from Priority Queue Text <function>push</function>
+ and <function>pop</function> Timing Test and Priority Queue
+ Random Integer <function>push</function>
+ and <function>pop</function> Timing Test that this does not
+ impede performance compared to the standard's priority
+ queues.</para>
+ <para>See Hash-Based Erase
+ Memory Use Test for a similar phenomenon regarding priority
+ queues.</para>
+ </section>
+ </section>
+
+ <!-- 06 <a href="priority_queue_text_join_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_join">
+ <info><title>
+ Text <function>join</function>
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_join.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ two containers, then merges the containers. It uses
+ <function>join</function> for this library's priority queues; for
+ the standard's priority queues, it successively pops values from
+ one container and pushes them into the other. The test measures
+ the average time as a function of the number of values.</para>
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_text_join_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures.
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_join.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_join_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_join_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_join.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>In this test the node-based heaps perform <function>join</function> in
+ either logarithmic or constant time. The binary heap requires
+ linear time, since the well-known heapify algorithm [clrs2001] is linear.</para>
+ <para>It would be possible to apply the heapify algorithm to the
+ standard containers, if they would support iteration (which they
+ don't). Barring iterators, it is still somehow possible to perform
+ linear-time merge on a <classname>std::vector</classname>-based
+ standard priority queue, using <function>top()</function>
+ and <function>size()</function> (since they are enough to expose
+ the underlying array), but this is impossible for
+ a <classname>std::deque</classname>-based standard priority queue.
+ Without heapify, the cost is super-linear.</para>
+ </section>
+ </section>
+
+
+ <!-- 07 <a href="priority_queue_text_push_timing_test"> -->
+ <section xml:id="performance.priority_queue.text_modify_up">
+ <info><title>
+ Text <function>modify</function> Up
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_modify_up.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ into a container then modifies each one "up" (i.e., it
+ makes it larger). It uses <function>modify</function> for this library's
+ priority queues; for the standard's priority queues, it pops values
+ from a container until it reaches the value that should be
+ modified, then pushes values back in. It measures the average
+ time for <function>modify</function> as a function of the number of
+ values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_text_modify_up_timing.cc
+ </filename>
+ </para>
+
+ <para>The test checks the effect of different underlying data
+ structures for graph algorithms settings. Note that making an
+ arbitrary value larger (in the sense of the priority queue's
+ comparison functor) corresponds to decrease-key in standard graph
+ algorithms [clrs2001].
+ </para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_up.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_modify_up_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_up_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the
+ native priority queues and this library's pairing and thin heap
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml//images/pbds_priority_queue_text_modify_up_timing_test_pairing_thin_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_up.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>As noted above, increasing an arbitrary value (in the sense of
+ the priority queue's comparison functor) is very common in
+ graph-related algorithms. In this case, a thin heap
+ (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>thin_heap_tag</classname>)
+ outperforms a pairing heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>pairing_heap_tag</classname>).
+ Conversely, Priority Queue Text
+ <function>push</function> Timing Test, Priority Queue
+ Text <function>push</function> and <function>pop</function> Timing Test, Priority
+ Queue Random Integer <function>push</function> Timing Test, and
+ Priority
+ Queue Random Integer <function>push</function> and <function>pop</function> Timing
+ Test show that the situation is reversed for other
+ operations. It is not clear when to prefer one of these two
+ different types.</para>
+
+ <para>In this test this library's binary heaps
+ effectively perform modify in linear time. As explained in
+ Priority Queue Design::Traits, given a valid point-type iterator,
+ a binary heap can perform
+ <function>modify</function> logarithmically. The problem is that binary
+ heaps invalidate their find iterators with each modifying
+ operation, and so the only way to obtain a valid point-type
+ iterator is to iterate using a range-type iterator until
+ finding the appropriate value, then use the range-type iterator
+ for the <function>modify</function> operation.</para>
+ <para>The explanation for the standard's priority queues' performance
+ is similar to that in Priority Queue Text
+ <function>join</function> Timing Test.</para>
+
+
+ </section>
+ </section>
+
+ <!-- 08 <a href="priority_queue_text_modify_down_timing_test"> -->
+
+ <section xml:id="performance.priority_queue.text_modify_down">
+ <info><title>
+ Text <function>modify</function> Down
+ </title></info>
+ <para></para>
+
+ <section xml:id="priority_queue.text_modify_down.info">
+ <info><title>
+ Description
+ </title></info>
+
+ <para>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+ into a container then modifies each one "down" (i.e., it
+ makes it smaller). It uses <function>modify</function> for this library's
+ priority queues; for the standard's priority queues, it pops values
+ from a container until it reaches the value that should be
+ modified, then pushes values back in. It measures the average
+ time for <function>modify</function> as a function of the number of
+ values.</para>
+
+ <para>
+ It uses the test file:
+ <filename>
+ performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc
+ </filename>
+ </para>
+
+ <para>The main purpose of this test is to contrast Priority Queue
+ Text <classname>modify</classname> Up Timing Test.</para>
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_down.results">
+ <info><title>
+ Results
+ </title></info>
+
+ <para>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+ </para>
+
+ <para>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+ container types versus several different versions of library's
+ priority_queues.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_modify_down_timing_test_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml/images/pbds_priority_queue_text_modify_down_timing_test_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- native 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_vector
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::vector</classname>
+ </entry>
+ </row>
+
+ <!-- native 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ n_pq_deque
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Sequence</classname>
+ </entry>
+ <entry>
+ <classname>std::deque</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binary_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binary_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 03 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ rc_binomial_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>rc_binomial_heap_tag</classname>
+ </entry>
+ </row>
+
+ <!-- priority_queue 04 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 05 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+
+ <para>The graphic below shows the results for the
+ native priority queues and this library's pairing and thin heap
+ priority_queue data structures.
+ </para>
+
+ <!-- results graphic -->
+ <informalfigure>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" format="PDF" scale="75"
+ fileref="../images/pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.pdf"/>
+ </imageobject>
+ <imageobject>
+ <imagedata align="center" format="PNG" scale="100"
+ fileref="/mnt/share/src/gcc.svn-trunk/libstdc++-v3/doc/xml//images/pbds_priority_queue_text_modify_down_timing_test_pairing_thin_local.png"/>
+ </imageobject>
+ </mediaobject>
+ </informalfigure>
+
+ <para>
+ The abbreviated names in the legend of the graphic above are
+ instantiated with the types in the following table.
+ </para>
+
+
+ <informaltable frame="all">
+
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <thead>
+ <row>
+ <entry><emphasis>Name/Instantiating Type</emphasis></entry>
+ <entry><emphasis>Parameter</emphasis></entry>
+ <entry><emphasis>Details</emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <!-- priority_queue 01 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ thin_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>thin_heap_tag</classname>
+ </entry>
+ </row>
+
+
+ <!-- priority_queue 02 -->
+ <row>
+ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry namest="c1" nameend="c3">
+ pairing_heap
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ </entry>
+ <entry>
+ <classname>Tag</classname>
+ </entry>
+ <entry>
+ <classname>pairing_heap_tag</classname>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+
+ </section>
+
+ <section xml:id="priority_queue.text_modify_down.observations">
+ <info><title>
+ Observations
+ </title></info>
+
+ <para>Most points in these results are similar to Priority Queue
+ Text <function>modify</function> Up Timing Test.</para>
+
+ <para>It is interesting to note, however, that as opposed to that
+ test, a thin heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>thin_heap_tag</classname>) is
+ outperformed by a pairing heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>pairing_heap_tag</classname>).
+ In this case, both heaps essentially perform an <function>erase</function>
+ operation followed by a <function>push</function> operation. As the other
+ tests show, a pairing heap is usually far more efficient than a
+ thin heap, so this is not surprising.</para>
+ <para>Most algorithms that involve priority queues increase values
+ (in the sense of the priority queue's comparison functor), and
+ so Priority Queue
+ Text <classname>modify</classname> Up Timing Test - is more interesting
+ than this test.</para>
+ </section>
+ </section>
+
+
+ </section> <!-- priority_queue -->
+
+ <section xml:id="pbds.test.performance.observations">
+ <info><title>Observations</title></info>
+
+ <section xml:id="observations.associative">
+ <info><title>Associative</title></info>
+
+ <section xml:id="observations.associative.underlying">
+ <info><title>
+ Underlying Data-Structure Families
+ </title></info>
+
+ <para>In general, hash-based containers have better timing performance
+ than containers based on different underlying-data structures. The
+ main reason to choose a tree-based or trie-based container is if a
+ byproduct of the tree-like structure is required: either
+ order-preservation, or the ability to utilize node invariants. If
+ memory-use is the major factor, an ordered-vector tree gives
+ optimal results (albeit with high modificiation costs), and a
+ list-based container gives reasonable results.</para>
+
+ </section>
+
+ <section xml:id="observations.associative.hash">
+ <info><title>
+ Hash-Based Containers
+ </title></info>
+
+ <para>Hash-based containers are typically either collision
+ chaining or probing. Collision-chaining
+ containers are more flexible internally, and so offer better
+ timing performance. Probing containers, if used for simple
+ value-types, manage memory more efficiently (they perform far
+ fewer allocation-related calls). In general, therefore, a
+ collision-chaining table should be used. A probing container,
+ conversely, might be used efficiently for operations such as
+ eliminating duplicates in a sequence, or counting the number of
+ occurrences within a sequence. Probing containers might be more
+ useful also in multithreaded applications where each thread
+ manipulates a hash-based container: in the standard, allocators have
+ class-wise semantics (see [meyers96more] - Item 10); a
+ probing container might incur less contention in this case.</para>
+ </section>
+
+ <section xml:id="observations.associative.hash_policies">
+ <info><title>
+ Hash Policies
+ </title></info>
+
+ <para>In hash-based containers, the range-hashing scheme seems to
+ affect performance more than other considerations. In most
+ settings, a mask-based scheme works well (or can be made to
+ work well). If the key-distribution can be estimated a-priori,
+ a simple hash function can produce nearly uniform hash-value
+ distribution. In many other cases (e.g., text hashing,
+ floating-point hashing), the hash function is powerful enough
+ to generate hash values with good uniformity properties
+ [knuth98sorting];
+ a modulo-based scheme, taking into account all bits of the hash
+ value, appears to overlap the hash function in its effort.</para>
+ <para>The range-hashing scheme determines many of the other
+ policies. A mask-based scheme works
+ well with an exponential-size policy; for
+ probing-based containers, it goes well with a linear-probe
+ function.</para>
+ <para>An orthogonal consideration is the trigger policy. This
+ presents difficult tradeoffs. E.g., different load
+ factors in a load-check trigger policy yield a
+ space/amortized-cost tradeoff.</para>
+ </section>
+
+ <section xml:id="observations.associative.branch">
+ <info><title>
+ Branch-Based Containers
+ </title></info>
+ <para>In general, there are several families of tree-based
+ underlying data structures: balanced node-based trees
+ (e.g., red-black or AVL trees), high-probability
+ balanced node-based trees (e.g., random treaps or
+ skip-lists), competitive node-based trees (e.g., splay
+ trees), vector-based "trees", and tries. (Additionally, there
+ are disk-residing or network-residing trees, such as B-Trees
+ and their numerous variants. An interface for this would have
+ to deal with the execution model and ACID guarantees; this is
+ out of the scope of this library.) Following are some
+ observations on their application to different settings.</para>
+
+ <para>Of the balanced node-based trees, this library includes a
+ red-black tree, as does standard (in
+ practice). This type of tree is the "workhorse" of tree-based
+ containers: it offers both reasonable modification and
+ reasonable lookup time. Unfortunately, this data structure
+ stores a huge amount of metadata. Each node must contain,
+ besides a value, three pointers and a boolean. This type might
+ be avoided if space is at a premium [austern00noset].</para>
+ <para>High-probability balanced node-based trees suffer the
+ drawbacks of deterministic balanced trees. Although they are
+ fascinating data structures, preliminary tests with them showed
+ their performance was worse than red-black trees. The library
+ does not contain any such trees, therefore.</para>
+ <para>Competitive node-based trees have two drawbacks. They are
+ usually somewhat unbalanced, and they perform a large number of
+ comparisons. Balanced trees perform one comparison per each
+ node they encounter on a search path; a splay tree performs two
+ comparisons. If the keys are complex objects, e.g.,
+ <classname>std::string</classname>, this can increase the running time.
+ Conversely, such trees do well when there is much locality of
+ reference. It is difficult to determine in which case to prefer
+ such trees over balanced trees. This library includes a splay
+ tree.</para>
+ <para>Ordered-vector trees use very little space
+ [austern00noset].
+ They do not have any other advantages (at least in this
+ implementation).</para>
+ <para>Large-fan-out PATRICIA tries have excellent lookup
+ performance, but they do so through maintaining, for each node,
+ a miniature "hash-table". Their space efficiency is low, and
+ their modification performance is bad. These tries might be
+ used for semi-static settings, where order preservation is
+ important. Alternatively, red-black trees cross-referenced with
+ hash tables can be used. [okasaki98mereable]
+ discusses small-fan-out PATRICIA tries for integers, but the
+ cited results seem to indicate that the amortized cost of
+ maintaining such trees is higher than that of balanced trees.
+ Moderate-fan-out trees might be useful for sequences where each
+ element has a limited number of choices, e.g., DNA
+ strings.</para>
+ </section>
+
+ <section xml:id="observations.associative.mapping_semantics">
+ <info><title>
+ Mapping-Semantics
+ </title></info>
+ <para>Different mapping semantics were discussed in the introduction and design sections.Here
+ the focus will be on the case where a keys can be composed into
+ primary keys and secondary keys. (In the case where some keys
+ are completely identical, it is trivial that one should use an
+ associative container mapping values to size types.) In this
+ case there are (at least) five possibilities:</para>
+ <orderedlist>
+ <listitem><para>Use an associative container that allows equivalent-key
+ values (such as <classname>std::multimap</classname>)</para></listitem>
+ <listitem><para>Use a unique-key value associative container that maps
+ each primary key to some complex associative container of
+ secondary keys, say a tree-based or hash-based container.
+ </para></listitem>
+ <listitem><para>Use a unique-key value associative container that maps
+ each primary key to some simple associative container of
+ secondary keys, say a list-based container.</para></listitem>
+ <listitem><para>Use a unique-key value associative container that maps
+ each primary key to some non-associative container
+ (e.g., <classname>std::vector</classname>)</para></listitem>
+ <listitem><para>Use a unique-key value associative container that takes
+ into account both primary and secondary keys.</para></listitem>
+ </orderedlist>
+ <para>Stated simply: there is a simple answer for this. (Excluding
+ option 1, which should be avoided in all cases).</para>
+ <para>If the expected ratio of secondary keys to primary keys is
+ small, then 3 and 4 seem reasonable. Both types of secondary
+ containers are relatively lightweight (in terms of memory use
+ and construction time), and so creating an entire container
+ object for each primary key is not too expensive. Option 4
+ might be preferable to option 3 if changing the secondary key
+ of some primary key is frequent - one cannot modify an
+ associative container's key, and the only possibility,
+ therefore, is erasing the secondary key and inserting another
+ one instead; a non-associative container, conversely, can
+ support in-place modification. The actual cost of erasing a
+ secondary key and inserting another one depends also on the
+ allocator used for secondary associative-containers (The tests
+ above used the standard allocator, but in practice one might
+ choose to use, e.g., [boost_pool]). Option 2 is
+ definitely an overkill in this case. Option 1 loses out either
+ immediately (when there is one secondary key per primary key)
+ or almost immediately after that. Option 5 has the same
+ drawbacks as option 2, but it has the additional drawback that
+ finding all values whose primary key is equivalent to some key,
+ might be linear in the total number of values stored (for
+ example, if using a hash-based container).</para>
+ <para>If the expected ratio of secondary keys to primary keys is
+ large, then the answer is more complicated. It depends on the
+ distribution of secondary keys to primary keys, the
+ distribution of accesses according to primary keys, and the
+ types of operations most frequent.</para>
+ <para>To be more precise, assume there are m primary keys,
+ primary key i is mapped to n<subscript>i</subscript>
+ secondary keys, and each primary key is mapped, on average, to
+ n secondary keys (i.e.,
+ E(n<subscript>i</subscript>) = n).</para>
+ <para>Suppose one wants to find a specific pair of primary and
+ secondary keys. Using 1 with a tree based container
+ (<classname>std::multimap</classname>), the expected cost is
+ E(Θ(log(m) + n<subscript>i</subscript>)) = Θ(log(m) +
+ n); using 1 with a hash-based container
+ (<classname>std::tr1::unordered_multimap</classname>), the expected cost is
+ Θ(n). Using 2 with a primary hash-based container
+ and secondary hash-based containers, the expected cost is
+ O(1); using 2 with a primary tree-based container and
+ secondary tree-based containers, the expected cost is (using
+ the Jensen inequality [motwani95random])
+ E(O(log(m) + log(n<subscript>i</subscript>)) = O(log(m)) +
+ E(O(log(n<subscript>i</subscript>)) = O(log(m)) + O(log(n)),
+ assuming that primary keys are accessed equiprobably. 3 and 4
+ are similar to 1, but with lower constants. Using 5 with a
+ hash-based container, the expected cost is O(1); using 5
+ with a tree based container, the cost is
+ E(Θ(log(mn))) = Θ(log(m) +
+ log(n)).</para>
+ <para>Suppose one needs the values whose primary key matches some
+ given key. Using 1 with a hash-based container, the expected
+ cost is Θ(n), but the values will not be ordered
+ by secondary keys (which may or may not be required); using 1
+ with a tree-based container, the expected cost is
+ Θ(log(m) + n), but with high constants; again the
+ values will not be ordered by secondary keys. 2, 3, and 4 are
+ similar to 1, but typically with lower constants (and,
+ additionally, if one uses a tree-based container for secondary
+ keys, they will be ordered). Using 5 with a hash-based
+ container, the cost is Θ(mn).</para>
+ <para>Suppose one wants to assign to a primary key all secondary
+ keys assigned to a different primary key. Using 1 with a
+ hash-based container, the expected cost is Θ(n),
+ but with very high constants; using 1 with a tree-based
+ container, the cost is Θ(nlog(mn)). Using 2, 3,
+ and 4, the expected cost is Θ(n), but typically
+ with far lower costs than 1. 5 is similar to 1.</para>
+
+ </section>
+
+ </section>
+
+
+ <section xml:id="observations.priority_queue">
+ <info><title>Priority_Queue</title></info>
+
+ <section xml:id="observations.priority_queue.complexity">
+ <info><title>Complexity</title></info>
+
+ <para>The following table shows the complexities of the different
+ underlying data structures in terms of orders of growth. It is
+ interesting to note that this table implies something about the
+ constants of the operations as well (see Amortized <function>push</function>
+ and <function>pop</function> operations).</para>
+
+ <informaltable frame="all">
+
+ <tgroup cols="6" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <colspec colname="c3"/>
+ <colspec colname="c4"/>
+ <colspec colname="c5"/>
+ <colspec colname="c6"/>
+ <thead>
+ <row>
+ <entry></entry>
+ <entry><emphasis><function>push</function></emphasis></entry>
+ <entry><emphasis><function>pop</function></emphasis></entry>
+ <entry><emphasis><function>modify</function></emphasis></entry>
+ <entry><emphasis><function>erase</function></emphasis></entry>
+ <entry><emphasis><function>join</function></emphasis></entry>
+ </row>
+ </thead>
+
+ <tbody>
+
+ <row>
+ <entry>
+ <classname>std::priority_queue</classname>
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(log(n)) Worst
+ </entry>
+ <entry>
+ Θ(n log(n)) Worst
+ <subscript>[std note 1]</subscript>
+ </entry>
+ <entry>
+ Θ(n log(n))
+ <subscript>[std note 2]</subscript>
+ </entry>
+ <entry>
+ Θ(n log(n))
+ <subscript>[std note 1]</subscript>
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ <<classname>Tag</classname> =
+ <classname>pairing_heap_tag</classname>>
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ <<classname>Tag</classname> =
+ <classname>binary_heap_tag</classname>>
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ <<classname>Tag</classname> =
+ <classname>binomial_heap_tag</classname>>
+ </entry>
+ <entry>
+ Θ(log(n)) worst
+ O(1) amortized
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname>
+ <<classname>Tag</classname> =
+ <classname>rc_binomial_heap_tag</classname>>
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ <entry>
+ Θ(log(n))
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <classname>priority_queue</classname><<classname>Tag</classname> =
+ <classname>thin_heap_tag</classname>>
+ </entry>
+ <entry>
+ O(1)
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(log(n)) worst
+ O(1) amortized,
+ or Θ(log(n)) amortized
+ <subscript>[thin_heap_note]</subscript>
+ </entry>
+ <entry>
+ Θ(n) worst
+ Θ(log(n)) amortized
+ </entry>
+ <entry>
+ Θ(n)
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+
+ </informaltable>
+
+ <para>[std note 1] This
+ is not a property of the algorithm, but rather due to the fact
+ that the standard's priority queue implementation does not support
+ iterators (and consequently the ability to access a specific
+ value inside it). If the priority queue is adapting an
+ <classname>std::vector</classname>, then it is still possible to reduce this
+ to Θ(n) by adapting over the standard's adapter and
+ using the fact that <function>top</function> returns a reference to the
+ first value; if, however, it is adapting an
+ <classname>std::deque</classname>, then this is impossible.</para>
+
+ <para>[std note 2] As
+ with [std note 1], this is not a
+ property of the algorithm, but rather the standard's implementation.
+ Again, if the priority queue is adapting an
+ <classname>std::vector</classname> then it is possible to reduce this to
+ Θ(n), but with a very high constant (one must call
+ <function>std::make_heap</function> which is an expensive linear
+ operation); if the priority queue is adapting an
+ <classname>std::deque</classname>, then this is impossible.</para>
+
+ <para>[thin_heap_note] A thin heap has
+ Θ(log(n)) worst case <function>modify</function> time
+ always, but the amortized time depends on the nature of the
+ operation: I) if the operation increases the key (in the sense
+ of the priority queue's comparison functor), then the amortized
+ time is O(1), but if II) it decreases it, then the
+ amortized time is the same as the worst case time. Note that
+ for most algorithms, I) is important and II) is not.</para>
+
+ </section>
+
+ <section xml:id="observations.priority_queue.amortized_ops">
+ <info><title>
+ Amortized <function>push</function>
+ and <function>pop</function> operations
+ </title></info>
+
+
+ <para>In many cases, a priority queue is needed primarily for
+ sequences of <function>push</function> and <function>pop</function> operations. All of
+ the underlying data structures have the same amortized
+ logarithmic complexity, but they differ in terms of
+ constants.</para>
+ <para>The table above shows that the different data structures are
+ "constrained" in some respects. In general, if a data structure
+ has lower worst-case complexity than another, then it will
+ perform slower in the amortized sense. Thus, for example a
+ redundant-counter binomial heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>rc_binomial_heap_tag</classname>)
+ has lower worst-case <function>push</function> performance than a binomial
+ heap (<classname>priority_queue</classname>
+ with <classname>Tag</classname> = <classname>binomial_heap_tag</classname>),
+ and so its amortized <function>push</function> performance is slower in
+ terms of constants.</para>
+ <para>As the table shows, the "least constrained" underlying
+ data structures are binary heaps and pairing heaps.
+ Consequently, it is not surprising that they perform best in
+ terms of amortized constants.</para>
+ <orderedlist>
+ <listitem><para>Pairing heaps seem to perform best for non-primitive
+ types (e.g., <classname>std::string</classname>s), as shown by
+ Priority
+ Queue Text <function>push</function> Timing Test and Priority
+ Queue Text <function>push</function> and <function>pop</function> Timing
+ Test</para></listitem>
+ <listitem><para>binary heaps seem to perform best for primitive types
+ (e.g., <type>int</type>s), as shown by Priority
+ Queue Random Integer <function>push</function> Timing Test and
+ Priority
+ Queue Random Integer <function>push</function> and <function>pop</function> Timing
+ Test.</para></listitem>
+ </orderedlist>
+
+ </section>
+
+ <section xml:id="observations.priority_queue.graphs">
+ <info><title>
+ Graph Algorithms
+ </title></info>
+
+ <para>In some graph algorithms, a decrease-key operation is
+ required [clrs2001];
+ this operation is identical to <function>modify</function> if a value is
+ increased (in the sense of the priority queue's comparison
+ functor). The table above and Priority Queue
+ Text <function>modify</function> Up Timing Test show that a thin heap
+ (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>thin_heap_tag</classname>)
+ outperforms a pairing heap (<classname>priority_queue</classname> with
+ <classname>Tag</classname> = <classname>Tag</classname> = <classname>pairing_heap_tag</classname>),
+ but the rest of the tests show otherwise.</para>
+
+ <para>This makes it difficult to decide which implementation to use in
+ this case. Dijkstra's shortest-path algorithm, for example, requires
+ Θ(n) <function>push</function> and <function>pop</function> operations
+ (in the number of vertices), but O(n<superscript>2</superscript>)
+ <function>modify</function> operations, which can be in practice Θ(n)
+ as well. It is difficult to find an a-priori characterization of
+ graphs in which the actual number of <function>modify</function>
+ operations will dwarf the number of <function>push</function> and
+ <function>pop</function> operations.</para>
+
+ </section>
+
+ </section> <!-- priority_queue -->
+
+ </section>
+
+
+ </section> <!-- performance -->
+
+</section>
\ No newline at end of file
<year>2008</year>
<year>2009</year>
<year>2010</year>
+ <year>2011</year>
<holder>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
</holder>