Commit ce1140e3 by Benjamin Kosnik Committed by Benjamin Kosnik

Docbook conversion of existing ext/pb_ds documentation.

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.

From-SVN: r176952
parent cc822cc1
......@@ -144,7 +144,6 @@ stamp-html-copy: stamp-html-docbook
cp -r ${top_srcdir}/doc/html/ext ${docbook_outdir}/html/manual/ext
cd ${docbook_outdir}/html/manual/ext
rm -rf ${docbook_outdir}/html/manual/ext/.svn
rm -rf ${docbook_outdir}/html/manual/ext/pb_ds/.svn
$(STAMP) stamp-html-copy
doc-html: stamp-html
......@@ -339,6 +338,7 @@ xml_sources_manual = \
${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 \
......@@ -350,6 +350,7 @@ xml_sources_manual = \
${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 \
......@@ -375,7 +376,8 @@ xml_noinst = \
${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
......@@ -433,7 +435,7 @@ doc-xml-single-docbook: stamp-xml-single-docbook
# 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
......@@ -443,7 +445,7 @@ doc-html-docbook: 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
......@@ -452,7 +454,7 @@ doc-html-single-docbook: 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
......@@ -506,6 +508,7 @@ doc-epub-docbook: stamp-epub-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}; \
......
......@@ -385,6 +385,7 @@ xml_sources_manual = \
${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 \
......@@ -396,6 +397,7 @@ xml_sources_manual = \
${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 \
......@@ -420,7 +422,8 @@ xml_noinst = \
${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
......@@ -463,6 +466,7 @@ manual_epub = ${docbook_outdir}/epub/libstdc++-manual.epub
# 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'
......@@ -657,7 +661,6 @@ stamp-html-copy: stamp-html-docbook
cp -r ${top_srcdir}/doc/html/ext ${docbook_outdir}/html/manual/ext
cd ${docbook_outdir}/html/manual/ext
rm -rf ${docbook_outdir}/html/manual/ext/.svn
rm -rf ${docbook_outdir}/html/manual/ext/pb_ds/.svn
$(STAMP) stamp-html-copy
doc-html: stamp-html
......@@ -818,14 +821,14 @@ doc-xml-single-docbook: stamp-xml-single-docbook
# 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
......@@ -834,7 +837,7 @@ doc-html-single-docbook: 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
......
<!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>
<!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>
<!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>
<!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>
<!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>
<!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>
<!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>
<!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> &amp;
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> &amp;
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> &amp;
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> &amp;
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> &amp;
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> &amp;
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>
<!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>
<!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>
<!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 &amp;qout;iterator to an iterator&amp;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&lt;
<a href=
"#metadata_type2849297114"><tt>metadata_type</tt></a>&gt;::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> &amp;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> &amp;other) <b>const</b>
</pre>
</td>
<td>
<p>Compares (negatively) to a different iterator
object.</p>
</td>
</tr>
</table>
</div>
</body>
</html>
<!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>
<!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>
<!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>
<!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>
<!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>
<!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>
<!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>
<!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&lt;<b>char</b>&gt;
</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&lt;
<a href=
"#metadata_type2849297114"><tt>metadata_type</tt></a>&gt;::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>
<!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>
<!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> &amp;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>
<!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> &amp;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>
<!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>&copy; 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>
<!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>
<!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>
<!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>
<!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> &amp;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>
<!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> &amp;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>
<!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>
<!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>
<!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&lt;typename Cntnr&gt;
void
some_op_sequence(Cntnr&amp; 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>
<!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>
<!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> &amp;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>
<!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&lt;<a href="#Key2501"><tt>Key</tt></a>&gt;
</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&lt;<b>char</b>&gt;
</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>&lt;
<b>class</b> It&gt;
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> &amp;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> &amp;
<b>operator</b>=
(<b>const</b> <span class=
"c2"><tt>list_update</tt></span> &amp;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> &amp;other)
</pre>
</td>
<td>
<p>Swaps content.</p>
</td>
</tr>
</table>
</div>
</body>
</html>
<!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>
<!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>&lt;
<b>typename</b> Key,
<b>typename</b> Mapped,
<b>typename</b> Eq_Fn = std::equal_to&lt;Key&gt;,
<b>typename</b> Update_Policy = <a href=
"move_to_front_lu_policy.html">move_to_front_lu_policy&lt;&gt;</a>,
<b>typename</b> Allocator = std::allocator&lt;<b>char</b>&gt; &gt;
<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 &amp;);
</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>
<!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>
<!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&lt;<b>char</b>&gt;
</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&lt;
<a href=
"#metadata_type2849297114"><tt>metadata_type</tt></a>&gt;::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>
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment